Наш магазин на eBay Наш магазин на AliExpress Наш канал в telegram

101 применение шлюза UART-to-I2C/SPI/1W (RH-0004). Часть 9. 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 6):

Программа Исходники Описание (поддерживаемые чипы, изменения в коде и т.д.) Поддерживаемые ОС
BigSPI (Winbond) Programmer sources W25Q08, W25Q16, W25Q32, W25Q64 Windows XP, Windows Vista, Windows 7, Windows 8
BigSPI (Winbond) Programmer v.3.6 Duo v.3.6 Duo sources
  • Update 08.05.2022
    Реализован правильный алгоритм подачи напряжения на CS при подаче питания на программируемую микросхему для шлюза RH-0004 (VDD и CS перенесено на IO_2, IO_0)
  • Добавлена возможность работы со шлюзом RH-0010
  • Изменён интерфейс (теперь схема подключения открывается в отдельном окне)
  • -/-

    Update 08.05.2022 По даташиту на W25Qxx, при включении питания на микросхему напряжение на линии CS должно повторять напряжение питания. В программе v.3.6 это требование было реализовано следующим образом: между VDD и CS нужно впаять резистор 4,7 кОм и далее подача напряжения на программируемую микросхему происходит по следующему алгоритму: сначала линия CS переводится в z-состояние, потом включается питание на программируемую микросхему (при этом напряжение на CS через резистор подтягивается к VDD), а затем, когда питание устаканится, линия CS переключается на выход.
    При этом есть один нюанс. Шлюз RH-0004 (в отличии от RH-0010) не умеет управлять напряжением питания, а также переключать CS в z-состояние при выбранном интерфейсе SPI. Вместе с тем, всё перечисленное выше можно проделать с линиями IO + их нагрузочной способности вполне хватает для питания микросхем W25Qxx, максимальный ток потребления которых не превышает 20 мА. Учитывая всё сказанное, для шлюза RH-0004 было решено при программировании микросхем W25Qxx использовать линию IO_0 в качестве CS, а линию IO_2 в качестве VDD (всё это учтено в программе v.3.6)

    1. Часть 1. USB программатор микросхем EPROM с интерфейсом I2C
    2. Часть 2. USB программатор микросхем EPROM с интерфейсом SPI
    3. Часть 3. USB-термометр на DS18B20 с передачей данных по сети
    4. Часть 4. USB программатор микросхем EPROM DS2430
    5. Часть 5. USB-программатор микросхем EPROM DS24B33
    6. Часть 6. Подключение 3-осевого гироскопа/акселерометра MPU6050 к компьютеру
    7. Часть 7. USB-программатор микросхем EPROM DS2431
    8. Часть 8. USB-программатор микросхем 1-Wire
    9. Часть 9. USB программатор SPI-flash серии W25Qxx
    10. Часть 10. USB программатор для микроконтроллеров AVR (последовательное программирование через SPI)

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

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