|
Протокол программирования ISP |
|
|
|
Aug 31 2012, 07:52
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Встала задача- написать оболочку для заводской инициализации устройства на LPC1768, в том числе сначала заливка тестовой прошивки, после инициализации, заливки уже рабочей прошивки, что бы это было в автомате. Встала проблема. ISP работает так. 1 осуществляется синхронизация 2 затем идет стирание секторов 3 затем идет запись блоков с контролем контрольной суммы в RAM и перезапись из RAM во FLASH 4 5 верификация путем чтения блоков по 512 байт Вот вызывает вопрос 4 пункт. Происходит запись 16 байт, затем выполнение команды Go. Что это за данные? Без эаписи этих данных прошивка не стартует. Смею предположить, это сигнатура валидности программного кода? Причем аналогичные дополнительные действия делаются при верификации 0 и 1 блока, последующие блоки просто читаются и все. Вот что можно увидеть монитором COM - порта. CODE Written data 57 20 32 36 38 34 33 35 39 36 38 20 31 36 0d W 268435968 16.
Read data 57 20 32 36 38 34 33 35 39 36 38 20 31 36 0d 30 W 268435968 16.0 0d 0a ..
Written data 30 60 44 41 2f 5c 60 24 21 60 36 21 50 31 50 60 0`DA/\`$!`6!P1P` 60 30 2c 60 2f 30 24 56 5c 0d `0,`/0$V\.
Read data 30 60 44 41 2f 5c 60 24 21 60 36 21 50 31 50 60 0`DA/\`$!`6!P1P` 60 30 2c 60 2f 30 24 56 5c 0d `0,`/0$V\.
Written data 31 30 31 30 0d 1010.
Read data 31 30 31 30 0d 4f 4b 0d 0a 1010.OK..
Written data 55 20 32 33 31 33 30 0d U 23130.
Read data 55 20 32 33 31 33 30 0d 30 0d 0a U 23130.0..
Written data 47 20 32 36 38 34 33 35 39 36 38 20 54 0d G 268435968 T.
Read data 47 20 32 36 38 34 33 35 39 36 38 20 54 0d G 268435968 T.
Written data 52 20 30 20 35 31 32 0d R 0 512.
Read data 52 20 30 20 35 31 32 0d 30 0d 0a 4d 36 23 34 60 R 0 512.0..M6#4` 24 2e 24 60 60 60 23 45 60 60 60 60 59 50 60 60 $.$```#E````YP`` 60 2e 44 60 60 60 23 4b 60 60 60 60 5b 30 60 60 `.D```#K````[0`` 60 23 4b 25 5f 5e 5c 60 60 60 60 60 60 60 60 60 `#K%_^\````````` 60 60 60 60 60 60 23 4f 0d 0a 4d 60 60 60 60 5c ``````#O..M````\ 30 60 60 60 60 60 60 60 60 23 53 60 60 60 60 43 0````````#S````C
ТУТ КУСОК БЛОКА ДО КОНЦА ОТРЕЗАН, ЧТО БЫ МЕСТА НЕ ЗАНИМАТЬ
Written data 4f 4b 0d OK.
Read data 4f 4b 0d OK.
Дальше следующий блок
Written data 57 20 32 36 38 34 33 35 39 36 38 20 31 36 0d W 268435968 16.
Read data 57 20 32 36 38 34 33 35 39 36 38 20 31 36 0d 30 W 268435968 16.0 0d 0a ..
Written data 30 60 44 41 2f 5c 60 60 21 60 36 21 50 31 50 60 0`DA/\``!`6!P1P` 60 30 2c 60 2f 30 25 33 58 0d `0,`/0%3X.
Read data 30 60 44 41 2f 5c 60 60 21 60 36 21 50 31 50 60 0`DA/\``!`6!P1P` 60 30 2c 60 2f 30 25 33 58 0d `0,`/0%3X.
Written data 31 30 30 39 0d 1009.
Read data 31 30 30 39 0d 4f 4b 0d 0a 1009.OK..
Written data 55 20 32 33 31 33 30 0d U 23130.
Read data 55 20 32 33 31 33 30 0d 30 0d 0a U 23130.0..
Written data 47 20 32 36 38 34 33 35 39 36 38 20 54 0d G 268435968 T.
Read data 47 20 32 36 38 34 33 35 39 36 38 20 54 0d G 268435968 T.
Written data 52 20 35 31 32 20 35 31 32 0d R 512 512.
Read data 52 20 35 31 32 20 35 31 32 0d 30 0d 0a 4d 60 3e R 512 512.0..M`> 60 21 5c 28 21 21 22 3b 24 21 28 21 22 5d 60 22 `!\(!!";$!(!"]`" 23 5c 59 50 25 26 32 26 41 50 31 50 29 26 22 54 #\YP%&2&AP1P)&"T 39 31 3a 21 2e 51 60 3f 60 60 30 30 27 40 60 3f 91:!.Q`?``00'@`? 22 60 30 30 46 51 60 32 21 50 0d 0a 4d 31 50 60 "`00FQ`2!P..M1P` 40 5f 2e 3c 60 60 21 21 60 60 54 60 60 4f 5f 5b @_.<``!!``T``O_[ 47 24 2b 34 24 31 40 24 41 22 60 30 60 5c 2f 37 G$+4$1@$A"`0`\/7 59 33 5f 23 5f 2c 22 21 40 60 22 21 40 38 60 50 Y3_#_,"!@`"!@8`P 40 28 27 28 60 28 2e 21 40 0d 0a 4d 24 2b 54 30 @('(`(.!@..M$+T0
Снова блок обрезан для экономии места
Written data 4f 4b 0d OK.
Read data 4f 4b 0d Дальше чтение идет без доп. команд Код Written data 52 20 31 30 32 34 20 35 31 32 0d R 1024 512.
Read data 52 20 31 30 32 34 20 35 31 32 0d 30 0d 0a 4d 36 R 1024 512.0..M6 24 44 60 5e 50 27 50 32 24 47 31 5e 28 40 30 50 $D`^P'P2$G1^(@0P 3f 2c 27 30 30 27 51 60 30 26 50 5e 5f 27 51 30 ?,'00'Q`0&P^_'Q0 Может кто-то подсказать, как это поворить? Инет глюканул в момент добавления топика и получилось две одинаковые темы. Просьба к админу или модератору - убейте ненужный дубль.
Сообщение отредактировал IgorKossak - Sep 7 2012, 09:44
Причина редактирования: [codebox] для длинного кода!!!
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 24)
|
Sep 1 2012, 12:34
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(KRS @ Sep 1 2012, 15:26)  не всегда! все зависит от тулчаина. Точно, само может не генерится. Цитата(KRS @ Sep 1 2012, 15:26)  И кстати не знаю как флеш маджик, а еще Philips Flash Utility считала контрольную сумму налету. FlashMagic выходит повсему тоже сумму считает и подставляет.
|
|
|
|
|
Sep 1 2012, 12:40
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Цитата(KRS @ Sep 1 2012, 15:26)  не всегда! все зависит от тулчаина. проще всего бинарник посмотреть и проверить. И кстати не знаю как флеш маджик, а еще Philips Flash Utility считала контрольную сумму налету. Я с Вами согласился бы безоговорочно в других условиях, но не этих. Смотрите, я же описывал. гружу hex файл в FM, он принимает по-моему только hex файлы, сейчас утверждать не буду, посколько дома, проверить не могу. Так вот этот файл он защивает в проц и тот начинает работать. Можно предположить, что сам FM высчитывает сумму векторов и вписывает ее в адрес 0х001С. Так нет же, я проверяю сканером, 0 сектор он записал таким, какой он в исходном hex файле. Причем, я тоже никаких сумм не высчитываю, записываю "как есть" , сравнение дампа 0 сектора, полученнго сканером и дампа сектора 0 полученнго тоже сканером от FM показывают их идентичность.
|
|
|
|
|
Sep 1 2012, 13:05
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(TAutomatic @ Sep 1 2012, 15:08)  Дело в том, что у меня все это есть. Я программирую контроллер не с помощью контроллера, а с помощью ПО для компа. Весь обмен снимется сканером COM порта. Скан аналогичен скану работы FM. Могу даже вылажить оба файла, там все очевидно. Их можно сравнить какой-то программой сравнения текста. Все идентично, за исключением одного - после прошивки моей программой контроллер не стартует. И это угнетает, так как есть что-то на "ровном месте", чего я не могу понять и пока никто не подсказал. Если Вы говорите что после прошивки вашей программой содержимое процессора полность аналогично рабочему hex-файлу (даже если передёрнуть вручную питание процессора), а программа всёравно не стартует, то кроме как вмешательства тёмных сил других причин неработоспособности я не вижу.... Или на прошиваемой плате есть аппратная проблемао которой Вы не подозреваете. У меня был проект полностью аналогичен вашему, только с одной стороны была тестируемая плата, а с другой не компьютер, а стенд-прошивальщик выполненый на таком же процессоре что и основная плата. Я щёл по пути полной пошаговой отладки каждой операции. Отправил команду - вывел в терминал что отправил, получил ответ или ошибку таймаута - вывел в терминал. Т.е. в каждый момент времени я видел все команды и все ответы перед глазами. Советую Вам поступить также т.к. больше не знаю что Вам посоветовать. Цитата(_Артём_ @ Sep 1 2012, 15:34)  FlashMagic выходит повсему тоже сумму считает и подставляет. Ничего он не считает т.к. бинарники, генерируемы iar и прошиваемые не с помощью flash magic прекрасно работают. Для примера привожу кусок hex-файла с векторами прерываний сгенерированного iar который после прошивки нормально работает. Код :1000000000080010E15C0100176A0100176A010096 :10001000176A0100176A0100176A0100AC88F7EF40 :10002000000000000000000000000000176A01004E :10003000176A010000000000176A0100176A01003A :10004000176A01008D130000176A0100A114000057 :10005000176A010073100000990D0000290A0000C2 :1000600041070000176A0100176A0100176A0100C2 :10007000176A0100176A0100176A0100176A010078 :10008000176A0100176A0100176A0100176A010068 :10009000176A0100176A0100176A0100176A010058 :1000A000176A0100176A0100176A0100176A010048 :1000B000176A0100176A0100176A0100176A010038 :0400C000176A0100BA
Сообщение отредактировал mempfis_ - Sep 1 2012, 13:07
|
|
|
|
|
Sep 1 2012, 13:35
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(mempfis_ @ Sep 1 2012, 16:05)  Ничего он не считает т.к. бинарники, генерируемы iar и прошиваемые не с помощью flash magic прекрасно работают. Из bin-файла (от Keil):
по адресу 0x1C нули. Зашивалось FM и работало... Аналогично с GCC - на месте суммы нули, но всё работало. PS. Пытался год назад писать для lpc11 на IAR - ничего не заработало, может дело в сумме было? Вот кстати про сумму ссылка
|
|
|
|
|
Sep 1 2012, 15:07
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(_Артём_ @ Sep 1 2012, 16:35)  Из bin-файла (от Keil):
по адресу 0x1C нули. Зашивалось FM и работало... Аналогично с GCC - на месте суммы нули, но всё работало. PS. Пытался год назад писать для lpc11 на IAR - ничего не заработало, может дело в сумме было? первые 8 слов из hexa приведённого мною выше :1000000000080010E15C0100176A0100176A010096 :10001000176A0100176A0100176A0100AC88F7EF40 00 08 00 10 e1 5c 01 00 17 6a 01 00 17 6a 01 00 17 6a 01 00 17 6a 01 00 17 6a 01 00 ac 88 f7 ef 10000800 + 00015ce1 + 00016a17 + 00016a17 + 00016a17 + 00016a17 + 00016a17 +eff788ac == 0 Посчитано в win-calc с ограничением разрядности 4 байта Используется IAR ARM 5.41 Flash Magic при прошивке ничего от себя не добавляет. Возможно у Вас прошивальщики сами считали контрольную сумму и добавляли её.
Сообщение отредактировал mempfis_ - Sep 1 2012, 15:09
|
|
|
|
|
Sep 1 2012, 15:33
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(mempfis_ @ Sep 1 2012, 18:07)  Flash Magic при прошивке ничего от себя не добавляет. А кто тогда добавляет? Цитата(mempfis_ @ Sep 1 2012, 18:07)  Возможно у Вас прошивальщики сами считали контрольную сумму и добавляли её. Кто такие прошивальщики? Я сам зашивал FlashMagic-ом. Ни про какую сумму понятия не имел, в bin-файле её нет.
|
|
|
|
|
Sep 1 2012, 20:36
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Цитата(mempfis_ @ Sep 1 2012, 19:29)  Я тоже этим не интересовался. Если в позиции 0x1c у топикстартера 0x00000000 то пусть возмёт первые 7 векторов, сложит их ограничивая разрядность в 4 байта, из 0x100000000 вычтет результат и найденную контрольную сумму расположит начиная с позиции 0x1c. Если заработает значит проблема была в этом. Судя по всему у топикстартера именно так и оказалось, по адресу 0х001С нули. Хотя мне это странно, я был уверен, что Кеил должен приготовить файл для прошивки с учетом сигнатуры работоспособности. Значит FM генерирует нужную контрольную сумму и вносит ее в нужное место. Осталось только в понедельник опробовать. Но тут меня одно не понятно. Я же описывал, что сканил обмен FM и контроллера и моей программы и контрллера. Я не увидел разницы в этом месте в нулевом секторе. Плохо что ли смотрел, где мои глаза были.... Ну понедельник все расставит на свои места, отпишусь... Цитата(TAutomatic @ Sep 1 2012, 22:50)  Судя по всему у топикстартера именно так и оказалось, по адресу 0х001С нули. Хотя мне это странно, я был уверен, что Кеил должен Топикстартеру так не терпелось, что съездил в офис проверить...  Просто очень нужен был этот самодельный прошивальщик. Жму руки всем за участие, особая благодарность KRS и mempfis_. Дествительно, кеил генерит хексфайл без сигнатуры валидности программного кода, маджик на лету правит и вписывает что нужно. Странно, как я не заметил это сканером сличая свой обмен и меджика. В общем, прощивальщик заработал, что и нужно было. Еще раз всем спасибо. Тема закрыта.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|