Наш канал в telegram

USB программатор SPI-flash серии W25Qxx на базе шлюза UART-to-I2C/SPI/1W

Написал для шлюза очередную программу (ссылка на скачиавние будет в конце статьи). Программа позволяет использовать UART-to-I2C/SPI/1W шлюз в комплекте с USB-to-UART преобразователем как USB-программатор SPI-flash микросхем Winbond серии 25Qxx (W25Q08, W25Q16, W25Q32, W25Q64) и их аналогов. Подобные флешки сейчас повсеместно используются во всяких роутерах, медиаплеерах, микрокомпьютерах и тому подобных устройствах для хранения прошивок. Собственно говоря, на написание этой программы меня как раз сподвигла необходимость восстановить bootloader на микрокомпьютере SKW92.

Итак, аппаратная часть выглядит вот так:
USB-программатор SPI-flash

Самое главное — не забудьте на шлюзе переключить выходное питание в 3.3 Вольта, поскольку для флешек этой серии используется питание от 2,7 до 3,6 Вольт.

Вот так выглядит окно программы:

программа для работы с USB-программатором SPI-flash

В окне программы, вверху справа располагается схема подключения выбранной микросхемы. Вообще говоря, все подобные микросхемы, независимо от размера, подключаются примерно одинаково. Единственная разница заключается в том, что для микросхем серии F (W25QxxFV) выводы микросхемы отмеченные синим цветом (HOLD и WP) должны быть подключены к VDD, а для миркосхем серии J (W25QxxJV) отмеченные синим цветом выводы никуда подключать не нужно (у этих микросхем вообще нет выводов HOLD и WP).

В нижней части окна программы располагается область, в которую выводится лог работы (действия, результаты, ошибки…). Этот лог, кстати можно сохранить в виде текстового файла (меню File -> Save log).

В средней части (в области Operating area) выбирается с какой частью микросхемы мы будем работать. Первоначально, при выборе чипа, здесь будет указана вся память выбранного чипа целиком. Однако, если изменить значения Start Block, Start Sector, End Block, End Sector, то область чипа, с которой мы будем работать, — изменится. Начальный и конечный адрес выбранной рабочей области указаны в полях Start Addr. / End Address.

Теперь немного о том, как устроено меню File. Пункты Open, Save и Save as… имеют два варианта: all и selected. Различие заключается в том, с какой частью чипа происходит работа при выборе соответствующего пункта меню. То есть, если мы, например, выбираем пункт Save all, то сохранен будет весь образ памяти выбранного чипа, а при выборе Save selected сохранена будет только рабочая область (только часть памяти начиная от Start Addr. и до End Address включительно). Аналогично, для загрузки данных из файла: при выборе пункта Open all… данные из файла будут загружены в образ памяти чипа начиная с нулевого адреса и до конца памяти чипа, а при выборе пункта Open selected… данные из файла будут загружены в рабочую область памяти, начиная от адреса Start Addr. и до End Address включительно.

Хотелось бы отметить, что spi-флешки программируются через такой программатор довольно медленно. Например, на заливку bootloader, config и factory settings (5 блоков по 64 Кбайта) в spi-flash W25Q64JV (такая стоит на skw92) уходит примерно 12 минут, на чтение — около 15 минут. Это обусловлено как низкой скоростью работы по spi самого шлюза (на частоте около 50 КГц), так и тормознутостью usb-uart преобразователя (скорость 115200 + всякие накладные расходы в виде команд и т.д.). В общем-то шлюз создавался для работы с гораздо менее ёмкими чипами (ёмкость обычных EEPROM, например, редко превышает несколько килобайт), тем не менее, при необходимости можно использовать его в том числе и для программирования spi-flash памяти (например, чтобы как и в моём случае восстановить bootloader).

Ну и теперь, самое главное, — ссылки на программу и её исходники:

Программа + исходники (C++ Builder).

Комментарии 2

Добавить комментарий