|
Протокол программирования 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] для длинного кода!!!
|
|
|
|
|
 |
Ответов
|
Aug 31 2012, 08:24
|

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

|
Занимался подобным проектом месяц назад. При реализации возникла проблема с чтением данных. Конкретно команда read memory возвращаля бред, хотя данные были записаны успешно. Снял лог с FlashMagic и увидел что для корректного чтения требуется запись какогото кода в оперативку. У меня небыло времени разбираться с этим, поэтому я просто контролировал успешно или неуспешно записывались блоки по 512 байт по возвращаемому статус-коду. А далее передёргивал питания и контролировал запуск программы. Сам процесс прошивки довольно прост - синхронизация с установкой скорости уарт по максимуму, стирание всего чипа, разблокировка чипа, а дальше в цикле команда записи, отправка данных, подготовка сектора, команда копирования ram в flash, контроль успешности копирования.
Конкретно Вам может помочь глава 32 в user manual и приложенные файлы. В приложенном файле есть процедура uu-кодирования данных которая позволяет кодировать по 512 байт - для меня именно кодирование данных вызывало затруднение, всё остальное довольно просто.
P.S. Если разберётесь зачем для корректного чтения необходимо отправлять дополнительные команды, напишите сдесь.
Сообщение отредактировал mempfis_ - Aug 31 2012, 08:44
|
|
|
|
|
Aug 31 2012, 10:44
|
Участник

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

|
Цитата(mempfis_ @ Aug 31 2012, 11:24)  А далее передёргивал питания и контролировал запуск программы. Бог с ним, с верификацией. Тоесть у Вас после выполнения всех описанных шагов контроллер запускался? Странно, делаю тоже самое, проверил и перепроверил еще раз. Все аналогично. Но у меня контроллер не запускается
|
|
|
|
|
Aug 31 2012, 16:39
|

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

|
Цитата(TAutomatic @ Aug 31 2012, 13:44)  Бог с ним, с верификацией. Тоесть у Вас после выполнения всех описанных шагов контроллер запускался? Странно, делаю тоже самое, проверил и перепроверил еще раз. Все аналогично. Но у меня контроллер не запускается При заливке программы выключаю питание, замыкаю перемычку boot, включаю питание, синхронизируюсь, прошиваю, выключаю питание. Далее снимаю перемычку boot, включаю питание, контролирую запуск программы. Сами заведомо рабочие и отлаженные прошивки получаю из IAR путём генерирования бинарного файла. Размер файла кратен 512 байтам - т.е. кратен размер uu-кодированного блока данных. Основная программа занимает всю flash, а тестовая столько сколько надо, если она не кратна 512 то дополняю её 0xff. Вы уверены то бинарный файл что Вы отправляете рабочий? Или он правильно кодируется и отправляется? С командами erase, copy думаюпроблем у Вас нет - они просты в формировании. Может быть чтото неправильно кодируется. Привожу кусок кода кодирования и отправки блока в 512 байт. CODE //копируем блок данных в буффер unsigned int i, j, chksum, num; for(i=0; i<512; i++) { isp_buff[i] =; //тут isp_buff заполняется очередным блоком прошивки } //вычисляем контрольную сумму chksum = 0; for (i=0; i<512; i++) { chksum += isp_buff[i]; } //кодируем данные сохраняя в isp_send_buff и отправляем for (i=0; i<512; i+=45) { //max 45 bytes a time num = 512 - i; if ( num > 45 ) num = 45; isp_send_buff[0] = num + 0x20; for ( j=0; j<num; j+=3 ) { uuencode(isp_buff+i+j,(unsigned char *)isp_send_buff+1+(j/3)*4); } isp_send_buff[1+((num+2)/3)*4] = 0; //отправляем строку _putstringBoard((const char*) isp_send_buff); _putcharBoard('\r'); delay_ms(10); } //отправляем контрольную сумму unsigned char buff[12]; my_itoa(chksum, buff); _putstringBoard((const char*) buff); _putcharBoard('\r');
Сообщение отредактировал IgorKossak - Sep 7 2012, 09:45
Причина редактирования: [codebox] для длинного кода!!!
|
|
|
|
Сообщений в этой теме
TAutomatic Протокол программирования ISP Aug 31 2012, 07:52 TAutomatic Цитата(mempfis_ @ Aug 31 2012, 11:24) Зан... Aug 31 2012, 09:36  TAutomatic И еще вопрос, не могу сообразить, как правильно до... Aug 31 2012, 12:06   TAutomatic Цитата(mempfis_ @ Aug 31 2012, 19:39) При... Aug 31 2012, 18:13    mempfis_ Цитата(TAutomatic @ Aug 31 2012, 21:13) Я... Sep 1 2012, 07:44     TAutomatic Цитата(mempfis_ @ Sep 1 2012, 10:44) Хочу... Sep 1 2012, 09:30      KRS Цитата(TAutomatic @ Sep 1 2012, 13:30) Не... Sep 1 2012, 10:14       TAutomatic Цитата(KRS @ Sep 1 2012, 13:14) А как вы ... Sep 1 2012, 10:42        mempfis_ Я бы предложил Вам пойти по длинному пути тщательн... Sep 1 2012, 11:57         TAutomatic Цитата(mempfis_ @ Sep 1 2012, 14:57) Я бы... Sep 1 2012, 12:08          mempfis_ Цитата(TAutomatic @ Sep 1 2012, 15:08) Де... Sep 1 2012, 13:05           KRS Цитата(mempfis_ @ Sep 1 2012, 17:05) Ниче... Sep 1 2012, 13:16           _Артём_ Цитата(mempfis_ @ Sep 1 2012, 16:05) Ниче... Sep 1 2012, 13:35            mempfis_ Цитата(_Артём_ @ Sep 1 2012, 16:35) Из bi... Sep 1 2012, 15:07             _Артём_ Цитата(mempfis_ @ Sep 1 2012, 18:07) Flas... Sep 1 2012, 15:33              mempfis_ Цитата(_Артём_ @ Sep 1 2012, 18:33) А кто... Sep 1 2012, 16:29               TAutomatic Цитата(mempfis_ @ Sep 1 2012, 19:29) Я то... Sep 1 2012, 20:36             KRS Цитата(mempfis_ @ Sep 1 2012, 19:07) Испо... Sep 1 2012, 17:32        KRS Цитата(TAutomatic @ Sep 1 2012, 14:42) Ко... Sep 1 2012, 12:26         _Артём_ Цитата(KRS @ Sep 1 2012, 15:26) не всегда... Sep 1 2012, 12:34         TAutomatic Цитата(KRS @ Sep 1 2012, 15:26) не всегда... Sep 1 2012, 12:40 KRS Вот вызывает вопрос 4 пункт. Происходит запись 16 ... Aug 31 2012, 20:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|