|
|
  |
SAM7S64 Стирает флэш |
|
|
|
Mar 21 2007, 15:29
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Ситуация такая:Имеется устройство, на базе SAM7S64. Оно работает с дискретными входами и выходами. Плюс общение по протоколу ModBus на RS-485. У устройства есть 16-ти битные и дискретные регистры (массивы просто) в которых хранятся настройки этого устройства (адрес, скорость и тпх). Так как никакой внешней флэшки не сделали, пришлось использовать для хранения внутреннию флэш. Для работы с которой я взял функцию, описанную в этой ветке http://electronix.ru/forum/index.php?showt...Sxx+flash+write . Получилось следующее: приходит команда по ModBus (05h или 10h) я делаю изменения в массивах-регистрах. отвечаю мастеру и ухожу на запись этих настроек во внутреннею флэш. Количество записей понимаю что ограничено, заказчик тоже это знает и его это вполне устраивает. Для него главное конечный размер устройства - как можно меньше чтобы был. После любой записи во флэш, я перегружаю контроллер, чтобы инициализировать новые настройки. И при включении (перезагрузки) читаю эти настройки из флэш, используя ту же функцию.Привезли устройства заказчику. Он объеденил это в сеть и стал тестировать. Получилось следующее: допустим он сконфигурировал (командами 10h и 05h) устройство с адресом 9 и перешел на следующее. После записей он проверял. верные ли настройки записаны - во всех случаях оказалось что верные. Тогда он переходил на следующее. Когда все устройства были сконфигурированы. он попытался еще раз прочитать настройки у каждого. и оказалось что одного все эти данные были сброшены в FFh ... такое ощущение, что при записи страница была стерта, а массив записан не был. Вобщем из 50 устройств 3 штуки выдали вот такую вот фигню. В разное время. Самое главное, что при не понятных обстоятелствах настройки сбрасывались. Я сегодня приехал к ним и мы пытались вызвать такую ситуацию еще раз, но нас ничего не вышло .... Работают как часы.На что грешить? куда смотреть? Меня тут уже пугали и плохой партией контроллеров (якобы контроллер памяти глючный), и корявыми руками программиста (увы, признаю, что они не слишком прямые), и даже солнечным затмением (вся эта фигня произошла именно в понедельник. когда утром было замение) .... Я брал устройства себе домой, делал все также. как и они там, и ни разу не выпадало такого, чтобы вместо нужных байтов, он мне записал FFh. Что ж это такое? Программа? Или аппаратная проблема?
|
|
|
|
|
Mar 21 2007, 22:06
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(beer_warrior @ Mar 21 2007, 23:58)  Понятно. Спасибо, попробую. Только все осложняется тем, что этот косяк выскочил по одному разу на трех устройствах, и было это не при мне. Я же у них уже второй день пытаюсь добится того же, но не выходит. Запись происходит идеально. То есть я даже не знаю какие пакеты в тот момент гуляли в сети. Хотя они говорят что был косяк один с их стороны: два устройства сделали с одним адресом. Может дело и в этом. но тоже сильно сомневаюсь.
|
|
|
|
|
Mar 22 2007, 07:07
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(khach @ Mar 22 2007, 01:17)  Прерывания вырубили перед записью флеша? Тем более, что все равно перегружаете полностью. И что с настройкой PLL? Может что-то слишком другое, чем при стандартной прошивке и код флешера несправляется? Все прерывания отключаются. Настройка PLL взята из стандартного проекта.
|
|
|
|
|
Mar 22 2007, 07:44
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
Цитата(Timofey @ Mar 21 2007, 17:29)  ... Для работы с которой я взял функцию, описанную в этой ветке http://electronix.ru/forum/index.php?showt...Sxx+flash+write . Получилось следующее.... А в том же треде есть такое: Цитата Только что сталкнулся с такими колесами. Пример тот же, но стоит задача записи довольно большого объема во флешь. Суть колес заключается в том, что флаг AT91C_MC_FRDY после команды на запись или не сбрасывается или сбрасывается поздно... поэтому страницы пишутся через одну.....пока просто поставил задержку в 6 мс. Мож тут грабли? Не дожидаять реального конца записи уход на ресет.
|
|
|
|
|
Mar 22 2007, 08:20
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(Alex03 @ Mar 22 2007, 10:44)  Мож тут грабли? Не дожидаять реального конца записи уход на ресет. Возможно. Но перед ресетом я сделал задержку в 30 мс (думаю достаточно?). Записываю всего одну страницу.
|
|
|
|
|
Mar 22 2007, 11:27
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(Timofey @ Mar 21 2007, 22:06)  Хотя они говорят что был косяк один с их стороны: два устройства сделали с одним адресом. Может дело и в этом. но тоже сильно сомневаюсь. Фигли тут сомневатся. просто повтори косяк и понаблюдай. Веди лог пакетов. Синхронизацию по началу пакета жесткую сделай, то есть при приеме маркера начала пакета начинай принимать пачку заново.
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Mar 22 2007, 11:59
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(SpiritDance @ Mar 22 2007, 14:27)  Фигли тут сомневатся. просто повтори косяк и понаблюдай. Веди лог пакетов. Да как я только не повторял косяк. И с теми же адресами, и с другими. Да, вижу что посылка уходит, а возвращается ну полная белеберда, так как они оба начинают отвечать. Да только, ошибки такой и не повторилось. Согласен, что когда они начинали отвечать одновременно, то у меня было такое, что первый байт пакета (адрес) изменялся на адрес еще одного устройства, и то устройство считало что посылка для него, но! CRC то не совпало, поэтому устройство считает что пакет принят с ошибкой и откидывает его. Вот и все. Цитата(SpiritDance @ Mar 22 2007, 14:27)  Синхронизацию по началу пакета жесткую сделай, то есть при приеме маркера начала пакета начинай принимать пачку заново. Не совсем понял идею, извините. Я пользуюсь DMA, у меня стоит прерывание на таймаут, то есть если у меня таймаут превышает 1,5 байта, то я считаю что посылка принята и начниаю её обработку. Согласно указаниям ModBus. Проверяю адрес, CRC и если все совпадает, обрабатываю посылку и посылаю ответ. Или вы что-то другое имели ввиду?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|