|
Изменение прошивки мк по GPRS-каналу...?, SIM300D и SIM900 |
|
|
|
Aug 19 2010, 09:51
|
Частый гость
 
Группа: Участник
Сообщений: 159
Регистрация: 8-06-07
Пользователь №: 28 294

|
Возникла необходимость предвидеть в устройстве возможность дистанционного обновления ПО микроконтроллера, желательно по GPRS-каналу. Ожидаемый объем прошивки 64-128 кб. Так как напрямую "в лоб" (прямо в память мк) это сделать скорее всего не получится, пришла идея использовать промежуточный буфер памяти в виде флеш памяти AT45 (она все равно находится на борту, 16 Мбит так что выделить 100 кб не проблема вроде). Идея в принципе проста - центральный сервер по команде будет отправлять по частям HEX файл с обновленной прошивкой, части будут проверятся по протоколу и на CRC, после чего будут записываться в буфер AT45, и формировать в ее памяти зеркало прошивки мк. После записи всего массива HEXа, сервер подаст команду на включение бутлоадера - и через минуту вторую устройство с новым ПО. Конечно нужно еще продумать протокол, возможно добавить кодирование и т.д. - но в теории идея выглядит очень работоспособной...? осталось попробовать на практике Хотелось бы услышать мнение форумчан по этому вопросу? Кто какой способ изменения ПО устройства использует?
|
|
|
|
|
Aug 19 2010, 09:56
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
Планирую заняться тем же, поделюсь своими соображениями.
Буферную память желательно иметь попроще интерфейсом, потому что баги могут быть в том числе и в управлении памятью, и чем проще управление, тем меньше вероятность неучтённых проблем. В то же время, обращение к памяти осуществляется из бутлоадера, а он, как известно, не обновляется, стало быть, его нужно очень тщательно отлаживать. И делать поменьше размером.
Удачи!
|
|
|
|
|
Aug 19 2010, 10:14
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 15-02-05
Пользователь №: 2 663

|
Привет Марис!
Именно так я у себя и сделал: внешняя память AT45DB, файлик забирается с сервера записывается туда. По окончании записи проверяется СRC, если она в порядке - управление передаётся на загрузчик. Файлик передаётся и хранится зашифрованным (RC4). Также загрузчик получает управление при включении питания. Он проверяет - "а нет ли в памяти файла прошивки?" Если есть - перепрошивает процессор и стирает файл из памяти. Благодаря этому выключения питания в процессе перепрошивки не страшны. Процессор - MSP430F149, загрузчик меньше 2-х килобайт. Это работает уже на паре тысяч экземпляров, и спасало не раз. Исходник , если что - мне не жалко
С уважением Ефанов Сергей.
|
|
|
|
|
Aug 19 2010, 10:46
|
Частый гость
 
Группа: Участник
Сообщений: 159
Регистрация: 8-06-07
Пользователь №: 28 294

|
Цитата(Dmitrich @ Aug 19 2010, 13:14)  Привет Марис!
Именно так я у себя и сделал: внешняя память AT45DB, файлик забирается с сервера записывается туда. По окончании записи проверяется СRC, если она в порядке - управление передаётся на загрузчик. Файлик передаётся и хранится зашифрованным (RC4). Также загрузчик получает управление при включении питания. Он проверяет - "а нет ли в памяти файла прошивки?" Если есть - перепрошивает процессор и стирает файл из памяти. Благодаря этому выключения питания в процессе перепрошивки не страшны. Процессор - MSP430F149, загрузчик меньше 2-х килобайт. Это работает уже на паре тысяч экземпляров, и спасало не раз. Исходник , если что - мне не жалко
С уважением Ефанов Сергей. Здравствуйте Сергей! Очень рад Вас "слышать"... Сколько лет, сколько зим... У меня такая же идейка... Исходник не помешал бы (особенно кодирование и если есть какое то пробное простое по сервера-обновления)... Какое в среднем время занимает обновление? А последнюю прошивку на всякий случай в АТ45 сохраняете? Цитата(Slonofil @ Aug 19 2010, 12:56)  Планирую заняться тем же, поделюсь своими соображениями.
Буферную память желательно иметь попроще интерфейсом, потому что баги могут быть в том числе и в управлении памятью, и чем проще управление, тем меньше вероятность неучтённых проблем. В то же время, обращение к памяти осуществляется из бутлоадера, а он, как известно, не обновляется, стало быть, его нужно очень тщательно отлаживать. И делать поменьше размером.
Удачи! С АТ45 все просто делается, SPI на аппаратном уровне поддерживается... По буту все ясно - нужно сделать надежным и универсальным - на все случаи жизни...
|
|
|
|
|
Aug 19 2010, 16:30
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 15-02-05
Пользователь №: 2 663

|
Цитата(mapic @ Aug 19 2010, 14:46)  >Исходник не помешал бы
выслал на e-mail
>(особенно кодирование и если есть какое то пробное простое по сервера-обновления)...
Файл забирается по протоколу HTTP через 80 порт с обычного web - сервера
>Какое в среднем время занимает обновление?
Примерно минуту, основное время занимает получение файла. Собственно перепрошивка процессора - секунд 15-20.
>А последнюю прошивку на всякий случай в АТ45 сохраняете?
Нет, а зачем?
|
|
|
|
|
Aug 20 2010, 03:28
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331

|
Цитата >Исходник не помешал бы выслал на e-mail Вы не могли бы здесь их выложить?
|
|
|
|
|
Aug 20 2010, 15:46
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 15-02-05
Пользователь №: 2 663

|
>Я просто думал немножко обрабатывать HEX файл на стороне сервера с тем чтобы уменьшить его размер для уменьшения трафика гпрс и объема памяти АТ45, а также для того что бы уменьшить размер и сложность бута? Я использую бинарный файл (не НЕХ), закодированный в .uue >Меня именно и интересовало среднее время передачи прошивки по гпрс каналу и какой объем пзу процессора? GPRS - это канал с малопредсказуемой скоростью. Если всё хорошо - файл закачивается секунд за 30-40. Но частенько он идет небольшими кусками с долгими паузами. В моём случае (MSP430F149) - 60К. Размер передаваемого файла (.uue) - 81К >А последнюю прошивку на всякий случай в АТ45 сохраняете? >Нет, а зачем? >Ну так на всякий случай... что бы в любой момент по команде сервера перепрошить? После перепрошивки в памяти процессора точная копия того образа, что мы получили. Смысла прошивать её ещё раз - нет. Если предположить, что по каким то причинам "слетит" память процессора - то в этом случае, сам себя он перепрошить уже не сможет. Цитата(SZ0 @ Aug 20 2010, 07:28)  Вы не могли бы здесь их выложить? Держите. Это функция, которая собственно и перепрошивает память процессора. Она получает управление при сбросе, проверяет, нет ли во внешней памяти прошивки, если она есть и контрольная сумма правильная - стирает основную память, прошивает новый образ (попутно его расшивровывая), и стирает файл прошивки во внешней памяти. Ключ шифра я, по понятным соображениям, из исходника удалил.
boot2010_08_19_20_10.rar ( 2.24 килобайт )
Кол-во скачиваний: 284
|
|
|
|
|
Aug 20 2010, 23:39
|
Частый гость
 
Группа: Участник
Сообщений: 159
Регистрация: 8-06-07
Пользователь №: 28 294

|
За исходник спасибо... Посмотрел Ваш пример... все понятно кроме декодирования RC4....? Не подскажите где можно почитать что то толковое по этому вопросу? Может у Вас имеется какой то пример программный кодировка => декодирование... Из того что прочитал в инете понял что в RC4 есть ключ (массив) разной длины по которому идет кодирование и декодирование...? но какой алгоритм не очень представляю  ? >Файл забирается по протоколу HTTP через 80 порт с обычного web - сервера Тогда у меня вопрос как вы его выкладываете на сервер и как читаете на сим300 ? HTTP - не поддерживает ведь работу с файлами, нужен FTP а с ним на сим300 и с нашим доступом в инет от операторов практически нереально работать... Как я понимаю на сервере тоже должен быть какой то алгоритм работы по которому он по запросу с устройства выдавал частями файл...? - думал разработать для этого дела протокол обмена с сервером... как вижу а Вас система наверное проще? ...уже позже почитал про формат .uue - довольно интересный формат...
|
|
|
|
|
Aug 21 2010, 03:38
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 15-02-05
Пользователь №: 2 663

|
Цитата(mapic @ Aug 21 2010, 03:39)  Не подскажите где можно почитать что то толковое по этому вопросу? Если спросить у Google "RC4 описание" то он всё и расскажет А ещё есть хорошая книжка : "Брюс Шнайер "Прикладная криптография". Цитата Тогда у меня вопрос как вы его выкладываете на сервер и как читаете на сим300 ? Как выкладывать - даже непонятно, в чём вопрос? Копирую туда файл (руками), как ещё? А как забираю - вот кусок обмена между SIM300 и процессором: AT+CDNSORIP=0
OK AT+CGATT=1
OK AT+CIPCSGP=1,"internet.beeline.ru","beeline","beeline"
OK AT+CIPSTART="TCP","195.34.238.215","80"
OK
CONNECT OK AT+CIPSEND
> GET /v100.uue HTTP/1.1 Host: 195.34.238.215
SEND OK HTTP/1.1 200 OK Server: Microsoft-IIS/5.1 Date: Tue, 20 Nov 2007 18:02:28 GMT Content-Type: application/octet-stream Accept-Ranges: bytes Last-Modified: Tue, 20 Nov 2007 17:30:42 GMT ETag: "f09869139b2bc81:a04" Content-Length: 82275
YoRcY
M,4``"CQ```(^0-($L!(JH[`2,):P$IR=LD"`6B`!PD,F`/)`WP`A`/)#(@#" M0RX`PD,I`/)`[P`J`/+0\``;`.)#&0#RT%\`&@#20Q\`PD,=`/)`_``>`,)# M,P#"0S$`\D,R`/)`&0`W`,)#-0#R0.8`-@#"0P``PD,!`,)#)0#"0RT`@D.F M`<)#!`#"0P4`@D-@`8)#8@&"0V0!@D-F`8)#@`&"0X(!@D.$`8)#A@&"0X@! .... .... Цитата Может у Вас имеется какой то пример программный кодировка => декодирование. вот исходник кодера/декодера, которым я шифрую прошивку. Алгоритм симметричный, если ему на вход подсунуть "простой" файл - на выходе получим зашифрованный, а если подсунуть зашифрованный - на выходе получим "простой". Исходник этот не мой - я его в сети нашёл, так что спасибо неизвестному автору. Цитата Может у Вас имеется какой то пример программный кодировка => декодирование. вот исходник кодера/декодера, которым я шифрую прошивку. Алгоритм симметричный, если ему на вход подсунуть "простой" файл - на выходе получим зашифрованный, а если подсунуть зашифрованный - на выходе получим "простой". Исходник этот не мой - я его в сети нашёл, так что спасибо неизвестному автору.
RC42010_08_21_07_20.rar ( 991 байт )
Кол-во скачиваний: 215PS: Советую сначала добиться, что бы перепрошивка у тебя без шифрования работала, а потом уже, если очень нужно - добавляй шифрование.
Сообщение отредактировал Dmitrich - Aug 21 2010, 03:42
|
|
|
|
|
Aug 21 2010, 13:09
|
Частый гость
 
Группа: Участник
Сообщений: 159
Регистрация: 8-06-07
Пользователь №: 28 294

|
Цитата(Dmitrich @ Aug 21 2010, 06:38)  Если спросить у Google "RC4 описание" то он всё и расскажет А ещё есть хорошая книжка : "Брюс Шнайер "Прикладная криптография". За наводку спасибо! Цитата(Dmitrich @ Aug 21 2010, 06:38)  Как выкладывать - даже непонятно, в чём вопрос? Копирую туда файл (руками), как ещё? А как забираю - вот кусок обмена между SIM300 и процессором:
AT+CDNSORIP=0
OK AT+CGATT=1
OK AT+CIPCSGP=1,"internet.beeline.ru","beeline","beeline"
OK AT+CIPSTART="TCP","195.34.238.215","80"
OK
CONNECT OK AT+CIPSEND
> GET /v100.uue HTTP/1.1 Host: 195.34.238.215
SEND OK HTTP/1.1 200 OK Server: Microsoft-IIS/5.1 Date: Tue, 20 Nov 2007 18:02:28 GMT Content-Type: application/octet-stream Accept-Ranges: bytes Last-Modified: Tue, 20 Nov 2007 17:30:42 GMT ETag: "f09869139b2bc81:a04" Content-Length: 82275
YoRcY
M,4``"CQ```(^0-($L!(JH[`2,):P$IR=LD"`6B`!PD,F`/)`WP`A`/)#(@#" M0RX`PD,I`/)`[P`J`/+0\``;`.)#&0#RT%\`&@#20Q\`PD,=`/)`_``>`,)# M,P#"0S$`\D,R`/)`&0`W`,)#-0#R0.8`-@#"0P``PD,!`,)#)0#"0RT`@D.F M`<)#!`#"0P4`@D-@`8)#8@&"0V0!@D-F`8)#@`&"0X(!@D.$`8)#A@&"0X@! .... ....
здесь тоже все ясно... а как файл с модуля забираете - просто все что льется с порта в память пишите? АТ45 успевает все записать? еще как я понимаю файл .uue нужно преобразовать в нормальный вид (хотя по спецификации вроде все несложно выглядит преобразование 4 байта в 3)... Я думал немножко по другому передавать файл небольшими пакетами с подтверждением приема... но для этого пришлось бы писать особое по сервера работающие по этому протоколу передачи... Цитата(Dmitrich @ Aug 21 2010, 06:38)  PS: Советую сначала добиться, что бы перепрошивка у тебя без шифрования работала, а потом уже, если очень нужно - добавляй шифрование. ну да так и планирую...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|