SPI FLASH программатор из ARDUINO DUE

Нет ответов
Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Добрый всем вечер.

Возникла необходимость залить дамп прошивки во флешку 25-й серии (N25S16). Даташита именно на такую флешку я не нашёл: непонятно кто производитель, а варианты бывают как на 1.8v, так и на 3.3v. На "vcc"(8-я нога) именно моей флешки висит 3.3v. Программатора нет, зато есть DUE, которая как нельзя лучше всего подходит для 3.3-вольтовых флешек. Полистав интернет, нигде не нашёл такого варианта. Конечно есть   вот такой вариант , но он для AVR и я неуверен что он будет работать на DUE. Вот скетч от этого проекта:

#include "SPIFlash.h"
#include <SPI.h>
#include <avr/wdt.h>
//////////////////////////////////////////
// flash(SPI_CS, MANUFACTURER_ID)
// SPI_CS - CS pin attached to SPI flash chip (8 in case of Moteino)
// MANUFACTURER_ID - OPTIONAL, 0x1F44 for adesto(ex atmel) 4mbit flash
// 0xEF30 for windbond 4mbit flash
//////////////////////////////////////////
SPIFlash flash(2, 0);
byte buf[1024];
void setup() {
Serial.begin(115200);
while (!Serial);
if (flash.initialize())
Serial.println("Init OK!");
else
Serial.println("Init FAIL!");
}
 
void loop() {
char cmd;
if (!Serial.available()) return;
cmd = Serial.read();
if (cmd == 't') {
Serial.print("COM ok\n");
return;
}
if (cmd == 'i')
{
Serial.print("DeviceID: ");
Serial.print(flash.readDeviceId(), HEX);
Serial.print('\n');
return;
}
if (cmd == 'a')
{
flash.chipErase();
while (flash.busy());
Serial.print("OK");
Serial.print('\n');
return;
}
if (cmd == 'e')
{
long sector = Serial.parseInt();
Serial.read(); // разделитель
flash.blockErase4K(sector);
Serial.print("OK");
Serial.print(sector);
Serial.print('\n');
return;
}
if (cmd == 'w')
{
long addr = Serial.parseInt();
Serial.read(); // разделитель
for (int bufsz = 0; bufsz < 128; bufsz++)
{
while (Serial.available() == 0);
buf[bufsz] = Serial.read();
}
flash.writeBytes(addr, buf, 128);
Serial.print("OK");
Serial.print(addr);
Serial.print('\n');
return;
}
if (cmd == 'r') {
long addr = Serial.parseInt();
Serial.read(); // разделитель
for (int i = 0; i < 4; i++)
{
flash.readBytes(addr + (i * 1024) + 0, buf, 1024);
for (int j = 0; j < 1024; j++)
Serial.write(buf[j]);
}
return;
}
}

#include <avr/wdt.h> - не находит такого файла, без этой строки - компилируется без ошибок. Что касается пинов - тоже не понятно. Например CS на этой Pro Mini - выбран "2"-й, а на DUE - есть специальный пин: "SCL". А как в скетче к нему обратиться? Ну и, сознаться честно, я представления не имею что в этом скетче творится. Вполне возможно что он и не подойдёт для DUE.

В общем, если это не слишком сложно и нахально (с моей стороны), прошу помощи со скетчем или подскажите где посмотреть готовый проект. 

Схему подключения - осилю сам.

Заранее благодарен!