Jump to content

    

User1285

Участник
  • Content Count

    171
  • Joined

  • Last visited

Community Reputation

0 Обычный

About User1285

  • Rank
    Частый гость
  • Birthday 01/10/1984

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1438 profile views
  1. У меня, к сожалению, нет опыта поддержки-ремонта массовых изделий, потому плоховато представляю возможные варианты выхода из строя изделий. Но, исходя из всего описанного выше, у меня тогда возникает некоторое замешательство...как же обеспечить устойчивую работу тех же устройств обработки и хранения информации если у меня в любой момент устройство может сброситься (от разряда или чего-то другого). У меня ж нет такого понятия как транзакции в БД, тут получается ситуация что я начал писать-менять какие-то данные и вдруг контроллер ребутнулся.. Хорошо если при этом пострадали только те данные, с которыми я работал в текущий момент, но где гарантия что этот ребут не вызовет повреждения данных в других ячейках внешней памяти. Возникает тогда вопрос в том что нужно: - при запуске контроллера производить проверку своей внутренней флеши и лишь после этого запускаться, - добавлять ко всем данным, хранящимся во внешней памяти, контрольные суммы и периодически производить их проверку (если данные хранятся структурами, то CRC к каждой структуре, если это массив данных, то CRC массива и т.д.). Но тогда также получается что хочу я этого или нет, но мой сервер должен знать расположение данных внутри каждого контроллера с тем, что если вдруг "побьются" данные, то отдав серверу ID ячейки он мне должен вернуть данные, которые лежат в данной ячейке. То же касается и массивов данных (но учитывая что CRC есть только для всего массива, то перезаливать нужно весь массив чтобы не усложнять все). Чтобы был меньше абстракций - это устройство контроля доступа. Соответственно данные - это номера карт, правила прохода, расписания и т.п. И этих данных много. В данный момент у меня работает таким образом что изначально данных во внешней памяти нет, а при работе с сервера приходят разные команды (типа добавить для карты N, расписание и правила), в результате в процессе работы внутри девайса формируется своеобразная база данных с возможностями поиска и т.п. Но она довольно хрупкая если ячейки вдруг начнут "биться". Ладно еще если пострадает какая-то из структур, ее можно перезапросить с сервере. Но если пострадают какие-либо из ячеек, завязанных на структурирование данных для ускорения поиска, то эти данные я не могу восстановить, т.к. они есть только внутри контроллер и сервер не знает о них. Выходит так, что данная архитектура системы плохо приспособлена для реалий жизни и нужно переделывать исходя из того что контроллер является менее надежным элементом и нужно структуру памяти каждого девайса формировать на сервере а потом заливать в девайс чтобы иметь возможность в случае необходимости ее перезалить. Второй вариант это, как было описано выше, использовать журналирование. Но это уже получается совсем другая сложность самого контроллера.
  2. Резервное питание должно меня, теоретически, подстраховать в случае нюансов с внешним питанием. Оно никак не спасет в случае выхода со строя каких-то элементов питания. От статики, я надеюсь, у меня получиться оградиться за счет того что все цепи, выходящие за пределы корпуса устройства, будут иметь развязку в той или иной степени. Буду очень благодарен если подскажете на какие еще возможные ситуации мне стоит обратить внимание и что еще может привести к перегрузке (будем считать что алгоритм будет работать так что не вызовет сброс по watchdog-у).
  3. Прошу прощения, сосредоточился на программной реализации и забыл упомянуть что конечно будет добавлено бесперебойное питание. Будет стоять резервный аккумулятор, при пропадании основного питание будет происходить переключение на резерв, в случае просадки резерва устройство будет само отключаться и включаться лишь после подачи основного питания + некоторая задержка чтобы успел хоть немного подзарядиться резервный аккум.
  4. Всем спасибо за помощь! Буду пробовать реализовать дублирование памяти. Кольцевой буфер с N старых версий проблематичен, потому как это, как мне кажеться) усложнит сильно алгоритм. Я добавлю к каждой записи контрольную сумму и в случае если контрольная сумма некорректная, то пытаюсь прочитать те же данные из второй копии памяти. А если и там проблемы с контрольной суммой, тогда буду считать данные не валидными и уведомлять сервер о проблеме. Интересно нужно ли в случае применения flash памяти типа AT45DF добавлять алгоритм разметки bad ячеек, чтобы если данные побились в ячейке, то исключать ее из дальнейшего использования...
  5. Добрый день! Возникла проблема с обеспечением целостности данных при хранении данных в памяти с постраничным стиранием. Память AT45DB321. В частности есть устройство, которое имеет много сохраненных в памяти структур данных. Эти структуры никак не связаны друг с другом, они могут в произвольном порядке изменяться с сервера, добавляться новые, деактивироваться старые. И вот тут я задумался о том как быть с потенциально возможной ситуацией: - прилетело уведомление что нужно заменить структуру STRUCT_N, которая находиться посереди страницы памяти MEM_PAGE_X, - я запускаю процесс перезаписи страницы (либо путем вычитки страницы в ОЗУ и заменой нужных мне данных, либо внутренними стредствами микросхемы), - в процессе перезаписи произошел сбой питания, оно пропало (либо после стирания, либо когда данные начали грузиться в память), - после восстановления питания у меня получается ситуация что кроме текущей редактируемой структуры у меня пострадали еще структуры, находящиеся на той же странице что и редактируемая структура. Да, я не получил от девайса ответа что редактируемая структура была изменена и я повторю данную операцию. Но как быть с остальными данными? Проблема осложняется тем, что сервер абсолютно не владеет информацией о фрагментации памяти, на каких страницах какие структуры храняться и т.е. я понятия не имею какие именно стуктуры я потерял совместно с редактируемой структурой. Посоветуйте, пожалуйста, какие меры можно предпринять чтобы избежать подобного? Один из вариантов, который я вижу (не самое интересное как по мне решение): - формировать на сервере прямо блоки данных (с контрольными суммами), - при каких-либо изменениях сначала редактируются данные на сервере, пересчитывается контрольная сумма, - после этого отправляется команда модицикации на девайс и в ответе должна прийти контрольная сумма блока памяти девайса, - если совпало - то все ОК, если не совпало - грузим полный блок кода с сервера на девайс. Однако при это получается слишком сильная связь сервер-девайс, т.е. если я перешел на другую структуру памяти или другую микросхему с другим размером страницы-блока, то мне нужно и на сервере вносить изменения в алгоритм работы. Хотя с другой стороны это упростит задачу периодического контроля целостности данных, т.е. раз в N-й промежуток времени сервер просит дать ему контрольные суммы памяти и сверяет со своими данными. Стоит ли замарачиваться с этим?
  6. Я понял, спасибо. Попробую добавить чтение еще и СИМ-карты периодическое. Возможно это как-то было связано с перебоями в работе киевстара, которые вчера наблюдались -под вечер смс долго не отправлялись, днем в телефоне одна из СИМ-ок (киевстар) выпала из сети и некоторое время не хотела регистрироваться....
  7. Ну а все-таки есть ли какие-то рекомендации по поводу команд, которыми предпочтительнее мониторить состояние модема и которые более точно позволят определить подобную ситуацию?
  8. Я понял, спасибо! Так это баг какой-то в прошивке? Или это я неправильно что-то делаю? А есть ли какая-то команда, по которой бы точно можно было понять что модуль в сети? Можно конечно периодически проверять состояние счета....но не будет ли проблем с оператором если делать это сильно часто...
  9. Прошу прощения, я лопухнулся, модуль не sim900d а просто sim900. Купил я эти модули лет 5 назад по хорошей цене и вроде как они были привезены откуда-то, или с Белоруссии, или с России, точно не припомню уже. С тех пор они лежали без дела, а теперь вот дошли до них руки. Кстати, модем светодиодом net led мигает с нормальной периодичностью индицируя что он в сети, однако оператор говорит что он не в сети :(
  10. Добрый вечер! Столкнулся с проблемой - модуль вошел в непонятное для меня состояние. Он отвечает по UART на запросы CLCC,CREG и CSQ, однако при попытке позвонить на него оператор говорит что абонент не в сети. Вот лог опроса AT-командами: [21:40:10.0] AT+CSQ [21:40:10.0] +CSQ: 20,0 [21:40:10.0] OK [21:40:10.1] AT+CLCC [21:40:10.1] OK [21:40:20.0] AT+CREG? [21:40:20.0] +CREG: 0,1 [21:40:20.0] OK [21:40:20.1] AT+CSQ [21:40:20.1] +CSQ: 20,0 [21:40:20.1] OK [21:40:20.1] AT+CLCC [21:40:20.1] OK [21:40:30.0] AT+CREG? [21:40:30.1] +CREG: 0,1 [21:40:30.1] OK [21:40:30.1] AT+CSQ [21:40:30.1] +CSQ: 28,0 [21:40:30.1] OK и так далее с такой же периодичностью. С чем может быть связано такое поведение? Модуль зарегистрировался в сети нормально, отвечал на СМС [21:29:12.8] +CMTI: "SM",1 [21:29:12.8] AT+CMGL="REC UNREAD" [21:29:12.9] +CMGL: 1,"REC UNREAD","+38067ххххххх","","16/08/29,21:29:08+12" [21:29:12.9] 12 0 [21:29:13.0] OK [21:29:13.0] AT+CMGDA="DEL READ" [21:29:13.1] OK [21:29:13.2] AT+CSCS="GSM" [21:29:13.2] OK [21:29:13.2] AT+CSMP=49,143,2,241 [21:29:13.2] OK [21:29:13.2] AT+CMGS="+38067ххххххх" [21:29:13.3] > Output 2 on. [21:29:13.3] [21:29:17.0] +CMGS: 72 [21:29:17.0] OK [21:29:17.0] AT+CREG? [21:29:17.0] +CREG: 0,1 [21:29:17.0] OK [21:29:17.0] AT+CSQ [21:29:17.0] +CSQ: 24,2 [21:29:17.0] OK а когда я через 10 минут попробовал на него позвонить, то уже не дозвонился. Оператор Киевстар. Логика перезапуска модема ориентирована на отсутствие ответа на AT-команды и, соответственно, модем не перезапускает, т.к. на команды приходят ответы. Прошивка модуля - Revision:1137B07SIM900M64_ST Я в растерянности...
  11. Да я честно говоря использовать VNC2 потому что бюджет проекта и временные рамки довольно ограничены и браться сейчас за переделывание-адаптацию какого-либо USB стека под FTDI это будет отнють не самое удачное решение. А особенно если стек еще и платный(имею ввиду Micrium USB Host Stack). Я думал что VNC2 уберет головную боль касательно USB хоста и позволит заниматься остальной частью проекта, но пока это не так. Написал в техподдержку FTDI, жду ответа.
  12. да вроде бы все нормально с VID и PID:
  13. Продолжаю работу по этому проекту. Купил платку с VNC2 на борту и платку дебаггера для VNC2 Судя по описанию микросхемы VNC2 и широкому ассортименту прошивок, все должно было пройти гладко. Однако скачал прошивку "UART to FT232 Host Sample Application ROM" c сайта FTDI firmware, прошил ей свой чип VNC2, но он не заработал как было обещано в роли моста. Тогда пришлось устанавливать среду разработки Vinculum II IDE и лезть в исходник этой прошивки (они есть в примерах идущих вместе со средой разработки). Запустив это все под дебаггером я увидел что VNC2 (насколько я понимаю) не обнаруживает подключенного чипа FT232: в функции VOS_HANDLE ft232_host_attach(VOS_HANDLE hUSB, unsigned char devHostFT232, unsigned char ftport) { usbhost_device_handle_ex ifFT232; usbhost_ioctl_cb_t hc_iocb; usbhost_ioctl_cb_vid_pid_t hc_iocb_vendor; common_ioctl_cb_t ft232_iocb; usbhostft232_ioctl_cb_attach_t ft232_att; VOS_HANDLE hHostFT232; // find FT232 class device hc_iocb_vendor.vid = USB_VID_FTDI; hc_iocb_vendor.pid = USB_PID_FTDI_FT232; // user ioctl to find first FT232 device hc_iocb.ioctl_code = VOS_IOCTL_USBHOST_DEVICE_FIND_HANDLE_BY_VID_PID; hc_iocb.handle.dif = NULL; hc_iocb.set = &hc_iocb_vendor; hc_iocb.get = &ifFT232; if (vos_dev_ioctl(hUSB, &hc_iocb) != USBHOST_OK) { return NULL; } // now we have a device, intialise the FT232 driver for it hHostFT232 = vos_dev_open(devHostFT232); ... проверка условия vos_dev_ioctl(hUSB, &hc_iocb) всегда возвращает USBHOST_NOT_FOUND. Может ли кто-то что-то подсказать по этому поводу?
  14. спасибо, я к этим чипам и пришел. VNC1L дороговатый. VNC2 больше заинтересовал. Но теперь заказчик чего-то задумался относительно USB и тех изделий :)
  15. В устройствах микросхема FT232 используется по своему назначению как преобразователь UART-USB. Изначально эти устройства рассчитаны на подключение к ПК через USB. На ПК используется специальный софт, который принимает данные с устройств и отображает информацию о состояниях устройств, пишет логи. Однако возникла необходимость собирать данные с этих устройств без помощи ПК, т.е. рядом с устройством располагать еще одно устройство(микроконтроллер+обвязка), которое будет иметь на борту USB HOST и соответственно как и ПК будет получать данные с устройств через USB.