Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Удаленная прошивка At91Sam9
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
wmakc
Хочу реализовать прошивку контролера по uart, используя свой протокол. Проблема в том, что считать старую прошивку из камеры получается, а загрузить новую никак.
То есть функция AT45_Read работает. После выполняется AT45_Erase. На ней вот все и останавливается. Если стирать часть памяти, не задействованную под прошивку, то все нормально.
Использую стандартный загрузчик AtBootstrap. Прошивка по адресу 0x8400.
kovigor
Цитата(wmakc @ Feb 20 2013, 15:42) *
То есть функция AT45_Read работает. После выполняется AT45_Erase. На ней вот все и останавливается.

Напишите свои функции, а не используйте совершенно ненужные в данном случае "черные ящики". Разместите их в ОЗУ и оттуда вызывайте, тогда можно стереть все, что угодно. Именно так я и делал ... Еще вариант - предусмотрите в прошивке сектор, который не подлежит обновлению, т.е. некий загрузчик, и разместите ваши функции в этом секторе. так я тоже делал, вполне работоспособный вариант ...
_4afc_
Цитата(wmakc @ Feb 20 2013, 15:42) *
То есть функция AT45_Read работает. После выполняется AT45_Erase. На ней вот все и останавливается. Если стирать часть памяти, не задействованную под прошивку, то все нормально.


Надо подобрать время паузы после подачи команды на стирание или проверять бит готовности флеши.




Цитата(kovigor @ Feb 20 2013, 15:48) *
Напишите свои функции, а не используйте совершенно ненужные в данном случае "черные ящики". Разместите их в ОЗУ и оттуда вызывайте, тогда можно стереть все, что угодно.


А где ещё можно разместить функции в SAM9 у которого прошивка в AT45xxx?
kovigor
Цитата(_4afc_ @ Feb 20 2013, 17:07) *
А где ещё можно разместить функции в SAM9 у которого прошивка в AT45xxx?

В внутренней флэш, конечно же, если таковая имеется sm.gif
wmakc
Внутренней флеш нет. Просто я думал, что может есть какая-то защита от записи, стирания прошивки из флеш.
_4afc_
Цитата(wmakc @ Feb 21 2013, 07:41) *
Внутренней флеш нет. Просто я думал, что может есть какая-то защита от записи, стирания прошивки из флеш.


У микросхемы AT45 есть защита от записи - включается и выключается командами.
Ещё почему-то на AT45DB321 первые 90 секторов шьются проcто, а вот дальше идут пляски с бубном...
jcxz
Использовал AT45DB321 в нескольких проектах. Бубен не использовал sm.gif
_4afc_
Цитата(jcxz @ Feb 24 2013, 12:31) *
Использовал AT45DB321 в нескольких проектах. Бубен не использовал sm.gif


А мы вот на SAM9 впаяли вместо них AT45DB161 - и программа перепрошивки (написанная студентами в ИАРе) стала глючить - тайминги дескать другие. Получилась версия для 161 или 321. Унификация не удалась.

В итоге плюнули на неё и запаяли везде 321 со старой версией.

А вот на Blackfin у меня дальше 90 сектора запись не идёт. Почему - не разбирался ибо код более 30к пока родить не удалось.
jcxz
Цитата(_4afc_ @ Feb 25 2013, 15:03) *
(написанная студентами в ИАРе)
- Может в этом и есть проблема? rolleyes.gif
У нас в устройстве может быть впаяна одна AT45DB321 или две AT45DB161 и ПО определяет автоматически, что впаяно и сколько сигналов CS использовать.
Работает в любом варианте без проблем со всем размером флеш в произвольном постраничном доступе.

Цитата(_4afc_ @ Feb 25 2013, 15:03) *
стала глючить - тайминги дескать другие.
Какие тайминги??? По всем частотам эти чипы вроде идентичны.
Если-же студенты, вместо использования регистра статуса делают задержки, то нужно было им сразу мозги вправить wink.gif
_4afc_
Цитата(jcxz @ Feb 26 2013, 04:50) *
Какие тайминги??? По всем частотам эти чипы вроде идентичны.
Если-же студенты, вместо использования регистра статуса делают задержки, то нужно было им сразу мозги вправить wink.gif


Конечно они использовали задержки. Тому было две причины.

1. В функциях AT45_Read и т.д. не было проверок статуса, там проверяется не занят ли блок SPI у SAM9.
2. Статус всегда показывал готовность, но флешки не писались sad.gif

Вот прямо сейчас проверил:

Стёр,записал нулями,считал страницу N100 - после каждой операции статуc=0хВ9. Страница содержит 0xFF
Стёр,записал нулями,считал страницу N88 - после каждой операции статуc=0хВ9. Страница содержит 0x00

Стираю командой 0х81. Пишу - 0х82. Читаю - 0хЕ8.

Вот такие чудеса в течении нескольких лет sm.gif
jcxz
Цитата(_4afc_ @ Feb 26 2013, 15:50) *
1. В функциях AT45_Read и т.д. не было проверок статуса, там проверяется не занят ли блок SPI у SAM9.
2. Статус всегда показывал готовность, но флешки не писались sad.gif
Читаем мануал на AT45DB321 и видим что запись - не обязательная причина установки занятости:
Код
There are several operations that can cause the device to be in a
busy state: Main Memory Page to Buffer Transfer, Main Memory Page to Buffer Compare, Buf-
fer to Main Memory Page Program, Main Memory Page Program through Buffer, Page Erase,
Block Erase, Sector Erase, Chip Erase and Auto Page Rewrite.


Цитата(_4afc_ @ Feb 26 2013, 15:50) *
Вот прямо сейчас проверил:
И...? Вы будете спорить с мануалом? Тогда чудеса Вам обеспечены ещё много лет... wink.gif

Цитата(_4afc_ @ Feb 26 2013, 15:50) *
Стёр,записал нулями,считал страницу N100 - после каждой операции статуc=0хВ9. Страница содержит 0xFF
Стёр,записал нулями,считал страницу N88 - после каждой операции статуc=0хВ9. Страница содержит 0x00
Вот такие чудеса в течении нескольких лет sm.gif
Ещё бы не чудеса! Ведь Вы даже и не AT45DB321D читаете/пишете, а нечто другое biggrin.gif
AT45DB321D не может возвращать такого статуса!
_4afc_
Цитата(jcxz @ Feb 27 2013, 04:49) *
Читаем мануал на AT45DB321 и видим что запись - не обязательная причина установки занятости:
Код
There are several operations that can cause the device to be in a
busy state: Main Memory Page to Buffer Transfer, Main Memory Page to Buffer Compare, Buf-
fer to Main Memory Page Program, Main Memory Page Program through Buffer, Page Erase,
Block Erase, Sector Erase, Chip Erase and Auto Page Rewrite.


И...? Вы будете спорить с мануалом? Тогда чудеса Вам обеспечены ещё много лет... wink.gif


Я вижу в этом английском, что команды Page Erase (0х81) и Main Memory Page Program through Buffer (0х82) вызывают busy state, что, как я понимаю должно отражаться в соответствующем регистре. Где фраза: запись - не обязательная причина установки занятости ?

Цитата(jcxz @ Feb 27 2013, 04:49) *
Ещё бы не чудеса! Ведь Вы даже и не AT45DB321D читаете/пишете, а нечто другое biggrin.gif
AT45DB321D не может возвращать такого статуса!


Что-то я вчера со-слепу не то увидел - 0xB5 он возвращает. 0х35 я никогда не видел.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.