реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SAM7S64 Стирает флэш
Timofey
сообщение Mar 21 2007, 15:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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. Что ж это такое? Программа? Или аппаратная проблема?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 21 2007, 16:24
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Timofey @ Mar 21 2007, 14:29) *
Что ж это такое? Программа? Или аппаратная проблема?
Я бы смотрел в сторону программы. В реальной сети постоянно бегают какие-то пакеты, на столе обмен поменьше.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Timofey
сообщение Mar 21 2007, 20:38
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Это то понятно, что их там до фига бегает. Но для этого и нужно проверить адрес (свой ли?), затем проверить CRC (совпадает ли?). Ведь если CRC не совпало - посылку откидываем. Опять же я беру CRC не последние два байта в посылке, а зная какая команда пришла у меня. я вычисляю какой длины должна быть посылка и потом только беру байты CRC. Помоему совпадение (трижды!) на трех устройствах за один день - это что-то многовато. Опять же теже пресловутые 3,5 байта жду ... ну вроде бы куча защит, чтобы не словить случайную посылку, которую мастер вовсе не отправлял.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 21 2007, 20:58
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Сталкивался с подобным цирком на мегах. В принципе может проскочить программный косяк. Советую немножко переиграть запись параметров и писать их в несколько последовательных страниц. Тогда можно будет отследить историю.
Как вариант прицепить 24-ю память и писать в нее лог полученных команд. Сверить потом с поданными.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Timofey
сообщение Mar 21 2007, 22:06
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(beer_warrior @ Mar 21 2007, 23:58) *
Понятно. Спасибо, попробую. Только все осложняется тем, что этот косяк выскочил по одному разу на трех устройствах, и было это не при мне. Я же у них уже второй день пытаюсь добится того же, но не выходит. Запись происходит идеально. То есть я даже не знаю какие пакеты в тот момент гуляли в сети. Хотя они говорят что был косяк один с их стороны: два устройства сделали с одним адресом. Может дело и в этом. но тоже сильно сомневаюсь.
Go to the top of the page
 
+Quote Post
khach
сообщение Mar 21 2007, 22:17
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Прерывания вырубили перед записью флеша? Тем более, что все равно перегружаете полностью. И что с настройкой PLL? Может что-то слишком другое, чем при стандартной прошивке и код флешера несправляется?
Go to the top of the page
 
+Quote Post
Timofey
сообщение Mar 22 2007, 07:07
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(khach @ Mar 22 2007, 01:17) *
Прерывания вырубили перед записью флеша? Тем более, что все равно перегружаете полностью. И что с настройкой PLL? Может что-то слишком другое, чем при стандартной прошивке и код флешера несправляется?
Все прерывания отключаются. Настройка PLL взята из стандартного проекта.
Go to the top of the page
 
+Quote Post
Alex03
сообщение Mar 22 2007, 07:44
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 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 мс.


Мож тут грабли? Не дожидаять реального конца записи уход на ресет.
Go to the top of the page
 
+Quote Post
Timofey
сообщение Mar 22 2007, 08:20
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(Alex03 @ Mar 22 2007, 10:44) *
Мож тут грабли? Не дожидаять реального конца записи уход на ресет.
Возможно. Но перед ресетом я сделал задержку в 30 мс (думаю достаточно?). Записываю всего одну страницу.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Mar 22 2007, 11:27
Сообщение #10


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Timofey
сообщение Mar 22 2007, 11:59
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



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


Дух погибшего транзистора
****

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



Ааа rtu modbus... идея снимается. smile.gif


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 21:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016