Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Микроконтроллеры > Симулятор SPI Flash


Автор: HardRock 13.06.14, 13:29
Всем привет!

Есть у меня железки с софтом для которых приходится часто экспериментировать. Они грузятся с SPI Flash.
Разумеется в случае неправильного загрузчика нужно выпаивать и перешивать :'(
Чтобы этого не делать, я припаиваю ZIF сокет и кидаю уже сами микросхемы между программатором и железкой.

Но этот вариант неудобен и долгий. Хочется чтобы была железка, воткнутая в USB. Запускаешь софт на компьютере, подсовываешь образ флешки и грузишь железку.
Такие промышенные варианты существуют, но ценник в 800+ баксов для хобби как-то не очень радует.

Итого есть идея реализовать самостоятельно.

Идея вот в чем: берем STM32, настраиваем на нем SPI Slave, настраиваем USB, пишем логику обработки и софт для PC.
В качестве контроллера хочу использовать STM32F103C8T6 т.к. он есть под рукой в варианте отладочной платы.

Пролема в том, что не очень хорошо знаю эти контроллеры.

Есть желание найти спецов по STM, которые могли бы написать прошивку. Я бы спроектировал саму архитектуру и написал кросплатформенный софт для PC.
Вместе выпустили бы свободный проект. Ну или не свободный, какие будут предпочтения =)

Автор: MeG 14.06.14, 18:06
Поговорить могу, писать вряд ли буду

Такой вопрос. Какого размера бинарный образ флешки? то есть куда его сохранять?
Другой вопрос. Разные SPI Flash прям очень разные по организации и по командам. То есть эмулировать SPI Flash придется либо какую-то конкретную, либо как-то переключать.

Ну а так, реализацию я вижу таким образом. В STM32F103C8T6 заплить USB Mass Storage Device, готовый пример есть в демках на библиотеку USB от производителя микроконтроллера (если нужно, найду ссылку на библиотеку и демки). К микроконтроллеру прикрутить память достаточного размера и на эту память повешать простенькую файловую систему, опять же есть готовые для STM32 (линки накидаю, при желании). При таком подходе получается: втыкаешь этот эмулятор в компьютер, на компе появляется диск типа флешки, на него кидаешь файл образа с определенным названием, а микроконтроллер этот файл отдает по SPI. Только нужно блокировать доступ к файлу (хотя бы переключателем): либо SPI, либо USB потому как бибилотеки скорее всего не реентрантные.

Автор: HardRock 15.06.14, 10:44
Цитата MeG @
Такой вопрос. Какого размера бинарный образ флешки? то есть куда его сохранять?

4 - 16 мегабайт.

Цитата MeG @
Другой вопрос. Разные SPI Flash прям очень разные по организации и по командам. То есть эмулировать SPI Flash придется либо какую-то конкретную, либо как-то переключать.

На компьютере реализация команд каждой флешки должна быть в виде плагина - "DLL'ки" если образно.
Какой моделью прикидываться - указывает пользователь при запуске.
Например:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    spisim -d mx25l3208e -f ./flash.img


Цитата MeG @
Ну а так, реализацию я вижу таким образом. В STM32F103C8T6 заплить USB Mass Storage Device, готовый пример есть в демках на библиотеку USB от производителя микроконтроллера (если нужно, найду ссылку на библиотеку и демки). К микроконтроллеру прикрутить память достаточного размера и на эту память повешать простенькую файловую систему, опять же есть готовые для STM32 (линки накидаю, при желании). При таком подходе получается: втыкаешь этот эмулятор в компьютер, на компе появляется диск типа флешки, на него кидаешь файл образа с определенным названием, а микроконтроллер этот файл отдает по SPI. Только нужно блокировать доступ к файлу (хотя бы переключателем): либо SPI, либо USB потому как бибилотеки скорее всего не реентрантные.

Возможно ли использовать контроллер исключительно в виде SPI Slave - USB прокси?
Мне кажется это было бы самым простым решением. Из USB прилетают байты, в USB пишешь байты.
Правда не уверен насчет таймингов SPI, возможна ли такая схема.

Автор: HardRock 15.06.14, 21:27
Кстати, флешка, для которой мне нужен симулятор, очень проста в использовании - MX25L3208E. Там буквально пару команд и ни каких настроек.
С той же ардуины читается / пишется элементарно.

Автор: Dushevny 16.06.14, 11:03
Цитата HardRock @
Возможно ли использовать контроллер исключительно в виде SPI Slave - USB прокси?
Мне кажется это было бы самым простым решением.

Можно. Но придется писать свой драйвер.

А какой контроллер на вашем целевом устройстве, которое грузится с SPI-флешки? Возможно он имеет JTAG или SWD и можно прошивать вашу SPI-флешку через него при помощи OpenOCD и простейший адаптер на базе FT2232 или какой-нибудь распространенный отладчик типа ST-Link или J-Link?

Автор: HardRock 16.06.14, 11:54
Цитата Dushevny @
Можно. Но придется писать свой драйвер.

Это не пугает. Во всяком случае под Linux.

Интересно вот что - как поведет себя мастер SPI если слэйв не будет отдавать данные "мгновенно" по частоте тактирования.


Цитата Dushevny @
А какой контроллер на вашем целевом устройстве, которое грузится с SPI-флешки? Возможно он имеет JTAG или SWD и можно прошивать вашу SPI-флешку через него при помощи OpenOCD и простейший адаптер на базе FT2232 или какой-нибудь распространенный отладчик типа ST-Link или J-Link?


На целевом устройстве стоит RT5350F. Ни USAR ни темболее JTAG не разведены, это не отладочная плата >:(
Мне нужно "вслепую" обновить встроеный Linux )))

Автор: Dushevny 16.06.14, 12:26
Цитата HardRock @
Интересно вот что - как поведет себя мастер SPI если слэйв не будет отдавать данные "мгновенно" по частоте тактирования.

А куда же слейв денется? На то он и слейв. Не, ну если превысить его максимально допустимую частоту - будет мусор, но тут уже никто ничего не обещал.

Под вашу задачу с минимальными затратами ложится FT2232 и подобные с режимом MSSP. Вот уж точно - пишите что угодно и как угодно под управлением своей писишной программы и не нужен внешний процик и не нужно ломать голову про легальность VID/PID и драйвер готовый от производителя.

Добавлено
Прошу прощения, не MSSP а MPSSE (Multi-Protocol Synchronous Serial Engine).

Автор: HardRock 16.06.14, 15:15
Да, интересная микруха. ARM мне как-то более привлекательным кажется. Хотя FT2232 судя по документации проще программировать, да и документация с примерами хорошими.

Выходит что если эмулятор не будет успевать в реал-тайме отвечать на SPI, то передача отвалится. Это нужно учесть.

Автор: Dushevny 16.06.14, 19:10
Я неправильно понял вашу задачу. Я думал, что вы хотите прошивать эту память прямо в схеме, а вы хотите ее эмулировать... А может прошивать? Лучше всего эмулировать память будет сама память :)

Автор: HardRock 17.06.14, 06:18
Именно эмулировать. Идея в том чтбы "впаять" эмулятор вместо флеша. Образ должен читаться с компьютера. Смысл в том, что тестировать изменения будет намного прозще и быстрее чем перекидывать флешку между железкой и программатором.

Автор: Dushevny 17.06.14, 07:19
А зачем ее перекидывать? Флешка штатно впаяна в схему. К ее ногам подпаивается FT2232 - это три ноги SPI, CS и земля, итого 5 проводков. Еще одна из ног FT2232 подключается на вход сброса основного процессора - шестой проводок. Запускается ваша программа, она заставляет FT2232 придавить вход сброса основного процессора. В состоянии сброса процессор переводит свои ноги в третье состояние и не мешает вашей программе через FT2232 залить образ в флешку. После заливки и сравнения ваша программа переводит ноги FT2232 в третье состояние. Это отпускает сброс основного процессора и теперь уже FT2232 не мешает вышедшему из комы процессору штатно загрузиться с родной флешки. Как-то так. Должно работать. И мне кажется это гораздо проще, чем эмулятор.

Автор: HardRock 17.06.14, 15:37
Нельзя просто взять и припаяться к сбросу процессора 8-)


Существуют ли SPI RAM на скажем 16 мегабайт?

Автор: Dushevny 18.06.14, 08:15
Цитата HardRock @
Нельзя просто взять и припаяться к сбросу процессора 8-)

Да ладно! Неужели устройство со встроенным линухом не имеет кнопки сброса? Или какого-нибудь внешнего подтягивающего резистора на ноге сброса? Мне кажется, припаять проводок к этой точке гораздо проще, чем выпаивать память и городить полноценный ее эмулятор.

ОЗУ подобного размера не встречал. Мегабит бывает - серия 23K, 23LCV от Микрочипа, OnSemi тоже мегабитные выпускает.

Автор: MeG 18.06.14, 15:43
Цитата HardRock @
Существуют ли SPI RAM на скажем 16 мегабайт?

Вряд ли. RAM-е нужно быть бы быстрой, потому она на параллельной шине или на двух.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)