Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.22.77.149] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Есть у меня железки с софтом для которых приходится часто экспериментировать. Они грузятся с SPI Flash. Разумеется в случае неправильного загрузчика нужно выпаивать и перешивать Чтобы этого не делать, я припаиваю ZIF сокет и кидаю уже сами микросхемы между программатором и железкой. Но этот вариант неудобен и долгий. Хочется чтобы была железка, воткнутая в USB. Запускаешь софт на компьютере, подсовываешь образ флешки и грузишь железку. Такие промышенные варианты существуют, но ценник в 800+ баксов для хобби как-то не очень радует. Итого есть идея реализовать самостоятельно. Идея вот в чем: берем STM32, настраиваем на нем SPI Slave, настраиваем USB, пишем логику обработки и софт для PC. В качестве контроллера хочу использовать STM32F103C8T6 т.к. он есть под рукой в варианте отладочной платы. Пролема в том, что не очень хорошо знаю эти контроллеры. Есть желание найти спецов по STM, которые могли бы написать прошивку. Я бы спроектировал саму архитектуру и написал кросплатформенный софт для PC. Вместе выпустили бы свободный проект. Ну или не свободный, какие будут предпочтения =) |
Сообщ.
#2
,
|
|
|
Поговорить могу, писать вряд ли буду
Такой вопрос. Какого размера бинарный образ флешки? то есть куда его сохранять? Другой вопрос. Разные SPI Flash прям очень разные по организации и по командам. То есть эмулировать SPI Flash придется либо какую-то конкретную, либо как-то переключать. Ну а так, реализацию я вижу таким образом. В STM32F103C8T6 заплить USB Mass Storage Device, готовый пример есть в демках на библиотеку USB от производителя микроконтроллера (если нужно, найду ссылку на библиотеку и демки). К микроконтроллеру прикрутить память достаточного размера и на эту память повешать простенькую файловую систему, опять же есть готовые для STM32 (линки накидаю, при желании). При таком подходе получается: втыкаешь этот эмулятор в компьютер, на компе появляется диск типа флешки, на него кидаешь файл образа с определенным названием, а микроконтроллер этот файл отдает по SPI. Только нужно блокировать доступ к файлу (хотя бы переключателем): либо SPI, либо USB потому как бибилотеки скорее всего не реентрантные. |
Сообщ.
#3
,
|
|
|
Цитата MeG @ Такой вопрос. Какого размера бинарный образ флешки? то есть куда его сохранять? 4 - 16 мегабайт. Цитата MeG @ Другой вопрос. Разные SPI Flash прям очень разные по организации и по командам. То есть эмулировать SPI Flash придется либо какую-то конкретную, либо как-то переключать. На компьютере реализация команд каждой флешки должна быть в виде плагина - "DLL'ки" если образно. Какой моделью прикидываться - указывает пользователь при запуске. Например: spisim -d mx25l3208e -f ./flash.img Цитата MeG @ Ну а так, реализацию я вижу таким образом. В STM32F103C8T6 заплить USB Mass Storage Device, готовый пример есть в демках на библиотеку USB от производителя микроконтроллера (если нужно, найду ссылку на библиотеку и демки). К микроконтроллеру прикрутить память достаточного размера и на эту память повешать простенькую файловую систему, опять же есть готовые для STM32 (линки накидаю, при желании). При таком подходе получается: втыкаешь этот эмулятор в компьютер, на компе появляется диск типа флешки, на него кидаешь файл образа с определенным названием, а микроконтроллер этот файл отдает по SPI. Только нужно блокировать доступ к файлу (хотя бы переключателем): либо SPI, либо USB потому как бибилотеки скорее всего не реентрантные. Возможно ли использовать контроллер исключительно в виде SPI Slave - USB прокси? Мне кажется это было бы самым простым решением. Из USB прилетают байты, в USB пишешь байты. Правда не уверен насчет таймингов SPI, возможна ли такая схема. |
Сообщ.
#4
,
|
|
|
Кстати, флешка, для которой мне нужен симулятор, очень проста в использовании - MX25L3208E. Там буквально пару команд и ни каких настроек.
С той же ардуины читается / пишется элементарно. |
Сообщ.
#5
,
|
|
|
Цитата HardRock @ Возможно ли использовать контроллер исключительно в виде SPI Slave - USB прокси? Мне кажется это было бы самым простым решением. Можно. Но придется писать свой драйвер. А какой контроллер на вашем целевом устройстве, которое грузится с SPI-флешки? Возможно он имеет JTAG или SWD и можно прошивать вашу SPI-флешку через него при помощи OpenOCD и простейший адаптер на базе FT2232 или какой-нибудь распространенный отладчик типа ST-Link или J-Link? |
Сообщ.
#6
,
|
|
|
Цитата Dushevny @ Можно. Но придется писать свой драйвер. Это не пугает. Во всяком случае под Linux. Интересно вот что - как поведет себя мастер SPI если слэйв не будет отдавать данные "мгновенно" по частоте тактирования. Цитата Dushevny @ А какой контроллер на вашем целевом устройстве, которое грузится с SPI-флешки? Возможно он имеет JTAG или SWD и можно прошивать вашу SPI-флешку через него при помощи OpenOCD и простейший адаптер на базе FT2232 или какой-нибудь распространенный отладчик типа ST-Link или J-Link? На целевом устройстве стоит RT5350F. Ни USAR ни темболее JTAG не разведены, это не отладочная плата Мне нужно "вслепую" обновить встроеный Linux ))) |
Сообщ.
#7
,
|
|
|
Цитата HardRock @ Интересно вот что - как поведет себя мастер SPI если слэйв не будет отдавать данные "мгновенно" по частоте тактирования. А куда же слейв денется? На то он и слейв. Не, ну если превысить его максимально допустимую частоту - будет мусор, но тут уже никто ничего не обещал. Под вашу задачу с минимальными затратами ложится FT2232 и подобные с режимом MSSP. Вот уж точно - пишите что угодно и как угодно под управлением своей писишной программы и не нужен внешний процик и не нужно ломать голову про легальность VID/PID и драйвер готовый от производителя. Добавлено Прошу прощения, не MSSP а MPSSE (Multi-Protocol Synchronous Serial Engine). |
Сообщ.
#8
,
|
|
|
Да, интересная микруха. ARM мне как-то более привлекательным кажется. Хотя FT2232 судя по документации проще программировать, да и документация с примерами хорошими.
Выходит что если эмулятор не будет успевать в реал-тайме отвечать на SPI, то передача отвалится. Это нужно учесть. |
Сообщ.
#9
,
|
|
|
Я неправильно понял вашу задачу. Я думал, что вы хотите прошивать эту память прямо в схеме, а вы хотите ее эмулировать... А может прошивать? Лучше всего эмулировать память будет сама память
|
Сообщ.
#10
,
|
|
|
Именно эмулировать. Идея в том чтбы "впаять" эмулятор вместо флеша. Образ должен читаться с компьютера. Смысл в том, что тестировать изменения будет намного прозще и быстрее чем перекидывать флешку между железкой и программатором.
|
Сообщ.
#11
,
|
|
|
А зачем ее перекидывать? Флешка штатно впаяна в схему. К ее ногам подпаивается FT2232 - это три ноги SPI, CS и земля, итого 5 проводков. Еще одна из ног FT2232 подключается на вход сброса основного процессора - шестой проводок. Запускается ваша программа, она заставляет FT2232 придавить вход сброса основного процессора. В состоянии сброса процессор переводит свои ноги в третье состояние и не мешает вашей программе через FT2232 залить образ в флешку. После заливки и сравнения ваша программа переводит ноги FT2232 в третье состояние. Это отпускает сброс основного процессора и теперь уже FT2232 не мешает вышедшему из комы процессору штатно загрузиться с родной флешки. Как-то так. Должно работать. И мне кажется это гораздо проще, чем эмулятор.
|
Сообщ.
#12
,
|
|
|
Нельзя просто взять и припаяться к сбросу процессора
Существуют ли SPI RAM на скажем 16 мегабайт? |
Сообщ.
#13
,
|
|
|
Цитата HardRock @ Нельзя просто взять и припаяться к сбросу процессора Да ладно! Неужели устройство со встроенным линухом не имеет кнопки сброса? Или какого-нибудь внешнего подтягивающего резистора на ноге сброса? Мне кажется, припаять проводок к этой точке гораздо проще, чем выпаивать память и городить полноценный ее эмулятор. ОЗУ подобного размера не встречал. Мегабит бывает - серия 23K, 23LCV от Микрочипа, OnSemi тоже мегабитные выпускает. |
Сообщ.
#14
,
|
|
|
Цитата HardRock @ Существуют ли SPI RAM на скажем 16 мегабайт? Вряд ли. RAM-е нужно быть бы быстрой, потому она на параллельной шине или на двух. |