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

 
 
 
Reply to this topicStart new topic
> Приведение типов данных, Из hex файла записать в flash МК
kolisnichenko_r
сообщение Mar 16 2016, 07:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Здравствуйте
Открываю на ПК файл *.hex (ПО пытаюсь писать на Visual Studio С++ ):
Код
unsigned char read_boot_file[max_n];
void OpenReadFile(void)
       {unsigned int i;
        String^ s;
    StreamReader ^sr = File::OpenText(openFileDialog1->FileName);
        String^ in = sr->ReadToEnd();
        this->textBoxHex->AppendText(in);
        len_hex_file=in->Length;
        for(i = 0; i < in->Length; i++)
         {
          read_boot_file[i] = in[i];
         }
        sr->Close();
       }

Далее выбираю из read_boot_file[i] данные для прошивки в МК и их отправляю в МК. Они записываются но не в том формате котором должны быть.
Содержимое *.hex файла: blink_vd.hex

Содержимое *.bin файла из МК: firmware.bin

Содержимое *.bin файла который сгенерирован компилятором: blink_vd.bin

Какое нужно приведение типа сделать?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 16 2016, 07:32
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Вы свой файл в строки преобразовали. А надо в двоичном виде посылать.
А писать надо "приведение", "компилятор".
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Mar 16 2016, 07:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(ViKo @ Mar 16 2016, 10:32) *
Вы свой файл в строки преобразовали. А надо в двоичном виде посылать.
А писать надо "приведение", "компилятор".

Это я подправлю, спасибо.
То есть, нужно char преобразовать в двоичный вид. Поищу как это делается.
Спасибо.
Go to the top of the page
 
+Quote Post
mvek
сообщение Mar 16 2016, 07:49
Сообщение #4





Группа: Участник
Сообщений: 7
Регистрация: 21-10-15
Пользователь №: 88 964



Цитата(ViKo @ Mar 16 2016, 07:32) *
Вы свой файл в строки преобразовали


А писать надо "у вас формируется файл в формате Intel Standard/Extended.Так что или настройте на формирование бинарного файла, или же парсируйте на стороне МК"
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Mar 16 2016, 08:49
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Применил следующий алгоритм:
Код
//Первый символ
          if (read_boot_file[nb_hex] >= '0' && read_boot_file[nb_hex] <= '9')
           {data->send[nb_send_prg]=(unsigned char)(read_boot_file[nb_hex] - '0');}
          if (read_boot_file[nb_hex] >= 'A' && read_boot_file[nb_hex] <= 'F')
           {data->send[nb_send_prg]=(unsigned char)(read_boot_file[nb_hex] - 'A' + 10); }
          if (read_boot_file[nb_hex] >= 'a' && read_boot_file[nb_hex] <= 'f')
           {data->send[nb_send_prg]=(unsigned char)(read_boot_file[nb_hex] - 'a' + 10); } //*/
          
          if(nb_hex>((30+9)*(nb_hex_j+1)+(4+2)*nb_hex_j))//4*nb_hex_j:39  82  121 //(4+1)*nb_hex_j):39  83  127 //(4+2)*nb_hex_j):39  84  129
           {nb_hex=nb_hex+9+4+1;                                    //54  96  134
            nb_hex_j++;                                             // 1   2    3
           }
            else{nb_hex++;}
//Второй символ
          if (read_boot_file[nb_hex] >= '0' && read_boot_file[nb_hex] <= '9')
           {data->send[nb_send_prg]=data->send[nb_send_prg]*16+(unsigned char)(read_boot_file[nb_hex] - '0'); }
          if (read_boot_file[nb_hex] >= 'A' && read_boot_file[nb_hex] <= 'F')
           {data->send[nb_send_prg]=data->send[nb_send_prg]*16+(unsigned char)(read_boot_file[nb_hex] - 'A' + 10); }
          if (read_boot_file[nb_hex] >= 'a' && read_boot_file[nb_hex] <= 'f')
           {data->send[nb_send_prg]=data->send[nb_send_prg]*16+(unsigned char)(read_boot_file[nb_hex] - 'a' + 10); } //*/

Теперь содержимое одинаково, но где-то теряется (не те записываются): из одного делается 2 символа после 1021. С этим я надеюсь, разберусь
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Mar 16 2016, 11:47
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Чтение Flash (МК LPC1549) в режиме ISP по CAN интерфейсу кто-то делал?
Защита от чтения не установлена.
Порядок следующий:
1) Задание адреса Fash для считывания: 0x0
Посылка: 23 10 50 00 00 00 00 00
Ответ: 60 10 50 00 00 00 00 00
2) Задание количества байт для считывания: len_write_flash - для пробы 1024
Посылка: 23 11 50 00 00 04 00 00
Ответ: 60 11 50 00 00 00 00 00
3) Чтение Flash-памяти из МК
Посылка: 21 50 1F 01 00 00 00 00
Ответ: 60 50 1F 01 00 00 00 00
4) Блочное считывание с МК - выгрузка SDO сегмента
Посылка: 60 00 00 00 00 00 00 00
Ответ: 80 50 1F 01 20 00 00 08 - неопределенная ошибка в User manual не нашел что означает
Посылка: 70 00 00 00 00 00 00 00
Ответ: 80 50 1F 01 20 00 00 08 - неопределенная ошибка в User manual не нашел что означает
Посылка: 60 00 00 00 00 00 00 00
Ответ: 80 50 1F 01 20 00 00 08 - неопределенная ошибка в User manual не нашел что означает
И так 1024 раза...
Может кто сталкивался?
Пробовал начинать читать с любых адресов FLASH, RAM - ответ тот же.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 16 2016, 15:33
Сообщение #7


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Посмотрите утилиты srecord. Код открытый, работает с разными типами файлов.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Mar 17 2016, 06:17
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(mdmitry @ Mar 16 2016, 18:33) *
Посмотрите утилиты srecord. Код открытый, работает с разными типами файлов.

Интересные утилиты, спасибо.

Цитата(kolisnichenko_r @ Mar 16 2016, 14:47) *
3) Чтение Flash-памяти из МК
Посылка: 21 50 1F 01 00 00 00 00
Ответ: 60 50 1F 01 00 00 00 00

Нашел на сайте NXP. Не правильно записан один байт в п.3:
3) Чтение Flash-памяти из МК
Посылка: 40 50 1F 01 00 00 00 00
Ответ: 60 50 1F 01 00 00 00 00
Go to the top of the page
 
+Quote Post

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

 


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


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