"Программатор" 24\25 флешек на ардуино.
Навеяно постом http://pikabu.ru/story/arduino_snova_vyiruchaet_5192318
Только 3 дня назад воспользовался сам этим проектом, думаю кому-то окажется полезным.
Успешно зашил 10 штук 25х флешей (2-2мб, 5-4мб, 3-8мб).
Собственно сам проект был взят у неизвестного товарища с сайта "технохрень" (не для рекламы). Далее текст из источника.
В общем это нужно чтобы перепрошивать 8 ножные SPI флешки. А это в свою очередь нужно чтобы восстанавливать роутеры, сбрасывать пароли на биосы и восстанавливать их, и много чего еще.
Будем делать за 10 минут самый простой программатор своими руками на Ардуино 🙂 Понадобится Arduino Pro Micro ну или любая другая (будет отличаться только распиновка на ардуино). Собираем эту сложную схему:
Сама прога-программатор:
Скачать софт http://skproj.ru/wp-content/uploads/2015/12/SpiEepromFlasher...
Вот прошивка (скетч) для ардуины:
#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;
}
}
Ничего сложного и главное нет лишних деталей в схеме))) Главное правильные библиотеки — скачать их вместе с прошивкой тут: http://skproj.ru/wp-content/uploads/2015/12/spi-eeprom-fw2.z...
Пробовал на флешках 25Q128FVSG, 25L3206E, еще какая-то роутерная безымянная.
Как выяснилось программатор может иногда не работать 🙂 Вариантов несколько:
— либо слишком длинные провода к флешке (нормально см 8-15)
— либо слишком китайская ардуина (например нано в3)
— либо дохлая флешка
Лично сделал такое безобразие (платку под панельку развел, но еще не травил):
Как показала практика 3х вольтовые флешки отлично работают от 5и вольтовой линни, но для низковольтовых лучше все таки добавить преобразователь.
Отлично завелось от ПониПрога.
Сообщество Ремонтёров
7.6K постов42.9K подписчика
Правила сообщества
ЕСЛИ НЕ ХОТИТЕ, ЧТОБЫ ВАС ЗАМИНУСИЛИ НЕ ПУБЛИКУЙТЕ В ЭТОМ СООБЩЕСТВЕ ПРОСЬБЫ О ПОМОЩИ В РЕМОНТЕ, ДЛЯ ЭТОГО ЕСТЬ ВТОРОЕ СООБЩЕСТВО:
Посты с просьбами о помощи в ремонте создаются в дочернем сообществе:https://pikabu.ru/community/HelpRemont
К публикации допускаются только тематические статьи с тегом "Ремонт техники".
В сообществе строго запрещено и карается баном всего две вещи:
1. Оскорбления.
2. Реклама.
В остальном действуют базовые правила Пикабу.