SPI FLASH программатор из ARDUINO DUE
- Войдите на сайт для отправки комментариев
Добрый всем вечер.
Возникла необходимость залить дамп прошивки во флешку 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.
В общем, если это не слишком сложно и нахально (с моей стороны), прошу помощи со скетчем или подскажите где посмотреть готовый проект.
Схему подключения - осилю сам.
Заранее благодарен!