Перейти к содержанию
    

Непонятка с прошивкой TMS320f28335

1) При построении проекта в CCS поставил генерацию *.hex файла прошивки.

2) До какого то момента (пока проект не стал большим) *.hex файл прошивал сторонним загрузчиком C2Prog.

3) После того как проект стал больше (насколько незнаю не уловил этот момент) *.hex файл зашивается в контроллер, но контроллер после сброса запускать программу отказывается. (пробывал отмечать все 8-мь секторов памяти в ручную для прошивки)

4) Запуская прошивальшик UniFlash подсовывая ему файл прошивки но в формате *.out всё прошивается и контроллер нормально запускается после сброса.

 

Кто нибудь сталкивался с такой проблемой? Может в C2prog есть ограничение в бесплатной версии на размер прошиваемого файла или hex в CCS не всегда корректно компилируетcя?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2) До какого то момента (пока проект не стал большим) *.hex файл прошивал сторонним загрузчиком C2Prog.

А сколько раз? ЧТо там с количеством перезаписей FLASH?

upd: посмотрел - теперь десятки тысяч циклов... не оно.

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Flash не затёрта если вы об этом. Вопрос в другом совсем: C2prog что то не дошивает, либо hex неправильно скомпиленный, хотя hex нормально компилиться с меньших проектов и зашивается. Проблема чисто програмная, но вот в каком месте?

Изменено пользователем ELEKTROS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) При построении проекта в CCS поставил генерацию *.hex файла прошивки.

2) До какого то момента (пока проект не стал большим) *.hex файл прошивал сторонним загрузчиком C2Prog.

3) После того как проект стал больше (насколько незнаю не уловил этот момент) *.hex файл зашивается в контроллер, но контроллер после сброса запускать программу отказывается. (пробывал отмечать все 8-мь секторов памяти в ручную для прошивки)

4) Запуская прошивальшик UniFlash подсовывая ему файл прошивки но в формате *.out всё прошивается и контроллер нормально запускается после сброса.

 

Кто нибудь сталкивался с такой проблемой? Может в C2prog есть ограничение в бесплатной версии на размер прошиваемого файла или hex в CCS не всегда корректно компилируетcя?

Аоходе что у вас явно не корректно сгенерёный хекс.

 

Попробуйте в настройках проекта указать, в секции C2000 Hex Utility -> Output format options - установите выдавать бинарик, и его заливайте в камень

 

Более того, через hex2000.exe вы можете сконвертить свой *.out вручную во что угодно, что-то подобное обсуждалось в моей теме: http://electronix.ru/forum/index.php?showt...p;#entry1255227

там всё просто - чтото вроде

hex2000.exe -boot -b -can8 -pllcr=10 -divsel=2 ../Debug/28335_test.out

 

В принципе формат бинарика и хекса очень простые, можно спокойно написать свой конвертер bin-to-hex. Но есть уже готовый в составе CCS, так что попробуйте использовать готовый.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PrSt, т.е. вы считаете что CCS неправильно генерирует hex файл, правильно я понял? Зачем мне bin to hex, если я получаю сразу hex при соответствующей настройке проекта?

Бинарник я залить с помощью C2prog не могу, там только hex.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PrSt, т.е. вы считаете что CCS неправильно генерирует hex файл, правильно я понял? Зачем мне bin to hex, если я получаю сразу hex при соответствующей настройке проекта?

Бинарник я залить с помощью C2prog не могу, там только hex.

нет, я считаю что вы могли поставить какую-то ненужную галочку для хекса, хотя я искренне сомневаюсь, но и исключать нельзя.

Я предложил альтернативный метод, а уж пробовать его или нет, это вы сами вольны. )

 

А почему вы не прошиваете при помощи CCS?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да дело в том что там всего один комбобокс выбрать надо чтобы hex генерился, вот и думаю может есть еще какие настройки, которых я не вижу в CCS v5 (если проблема в этой части конечно).

 

Прошить могу и с помощью Uniflash, который кстати встроен в CCS, но допустим я хочу чтобы какой нибудь техник-программист мог прошивать контроллеры без моего участия или обновлять софт при необходимости, не разворачивать же ему на ноуте всю среду с проектами чтобы это делать, а C2prog проще некуда, чтобы ему это сделать. Конечно в этом случае самый оптимальный вариант написать свой загрузчик по какому нибудь интерфейсу, но особого времени на это нету, да и проблема остро не стоит, а готового нету тоже (такого чтобы можно было прикрутить к своему проекту без особого гемороя).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот два файла *.out и *.hex. Сгенерированные из одного проекта, но hex толи не так зашивается, толи неправильно сгенерирован. Кто проверит может соответствие.

pack.zip

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

выяснил наконец-то, что hex генерируется неправильно, но почему понять не могу, там настроек то и нету для этого, чтобы что то было не так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибаетесь, настроек там очень и очень много.

 

Описание формата можно прочесть в файлике spru513 (TMS320C28x Assembly Language Tools) раздел Hex Conversion Utility Description.

 

Настроить лучше всего через *.cmd файл, например так:

qrfkW.png hm5jN.png

 

Примеры можно глянуть в controlSUITE для контроллеров с USB, f2806x например, проект bl_app.

 

 

А в CCS6 появился отдельный раздел в меню, для генерации этого Hex файла, те же ключи и адреса, только в другом оформлении:

 

WxHOG.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так combobox как на первой картинке (Create flash image: Intel-HEX) выбираю и всё остальное пишеться автоматом.

 

В частности в командная строка заполняется:

"${CG_TOOL_HEX}" -i "${BuildArtifactFileName}" -o "${BuildArtifactFileBaseName}.hex" -order MS -romwidth 16

 

А в вашем cmd смотрю есть еще какие границы во flash использовать. Как вариант возможно используется где-то cmd по умолчанию и в нём эти границы прописаны не все (это подтвердило бы почему на некоторых проектах не сильно больших hex генерируется правильно у меня).

 

Спасибо за наводку, теперь хоть есть направление куда копать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Turnaev Sergey, если у меня линкер почти стандартный допустим:

 

MEMORY
{
PAGE 0 :   /* Program Memory */
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
   RAML0       : origin = 0x008000, length = 0x000800     /* on-chip RAM block L0 */
   RAML1       : origin = 0x008800, length = 0x000400     /* on-chip RAM block L1 */
   OTP         : origin = 0x3D7800, length = 0x000400     /* on-chip OTP */

   FLASHH      : origin = 0x3D8000, length = 0x004000     /* on-chip FLASH */
   FLASHG      : origin = 0x3DC000, length = 0x004000     /* on-chip FLASH */
   FLASHF      : origin = 0x3E0000, length = 0x004000     /* on-chip FLASH */
   FLASHE      : origin = 0x3E4000, length = 0x004000     /* on-chip FLASH */   
   FLASHD      : origin = 0x3E8000, length = 0x004000     /* on-chip FLASH */
   FLASHC      : origin = 0x3EC000, length = 0x004000     /* on-chip FLASH */
   FLASHA      : origin = 0x3F4000, length = 0x003F80     /* on-chip FLASH */
   CSM_RSVD    : origin = 0x3F7F80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
   BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
   CSM_PWL_P0  : origin = 0x3F7FF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */

   FPUTABLES   : origin = 0x3FD860, length = 0x0006A0      /* FPU Tables in Boot ROM */
   IQTABLES    : origin = 0x3FDF00, length = 0x000B50     /* IQ Math Tables in Boot ROM */
   IQTABLES2   : origin = 0x3FEA50, length = 0x00008C     /* IQ Math Tables in Boot ROM */
   IQTABLES3   : origin = 0x3FEADC, length = 0x0000AA      /* IQ Math Tables in Boot ROM */

   ROM         : origin = 0x3FF3B0, length = 0x000C10     /* Boot ROM */
   RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
   VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */

PAGE 1 :   /* Data Memory */
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
           /* Registers remain on PAGE1                                                  */

   BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
   RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
   RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
   RAML2       : origin = 0x008C00, length = 0x000400     /* on-chip RAM block L2 */
   RAML3       : origin = 0x009000, length = 0x001000      /* on-chip RAM block L3 */
   RAML4       : origin = 0x00A000, length = 0x002000     /* on-chip RAM block L4 */
   RAML5       : origin = 0x00C000, length = 0x002000     /* on-chip RAM block L5 */
   RAML6       : origin = 0x00E000, length = 0x002000     /* on-chip RAM block L6 */
   RAML7       : origin = 0x010000, length = 0x002000     /* on-chip RAM block L7 */
   RAML8       : origin = 0x012000, length = 0x002000     /* on-chip RAM block L8 */
   USB_RAM     : origin = 0x040000, length = 0x000800     /* USB RAM          */   
   FLASHB      : origin = 0x3F0000, length = 0x004000     /* on-chip FLASH */     
}

SECTIONS
{

   /* Allocate program areas: */
   .cinit              : > FLASHA,     PAGE = 0
   .pinit              : > FLASHA,     PAGE = 0
   .text               : > FLASHB,     PAGE = 1
   codestart           : > BEGIN,      PAGE = 0
................................................................................

}

Конфигурация командного файла для генерации hex:

card.out
--intel
--image
--map=card.mxp
--order=MS
--romwidth=16
--memwidth=16
--fill=0xFFFF

ROMS
{
    APP_FLASH1 : origin = 0x300000, length = 0x40000, files = { card_new.hex }
}

И при компиляции hex секция .text:

warning: section card.out(.text) at "адрес секции" falls in unconfigured

memory (skipped), т.е. секция пропущена,

а если перенести FLASHB в PAGE0 или назначить секцию .text в разделе FLASH объявленном в PAGE0, то всё нормально компилисься без предупреждений при генерации hex.

Сталкивались с таким?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.text это область размещения исполняемого кода и констант, она должна быть размещена в PAGE 0. PAGE 1 - это память данных.

 

FLASHB из PAGE 1 используется например для хранения перезаписываемых данных. В качестве этой памяти может быть любая другая секция, а может и вовсе отсутствовать.

 

С варнингами такими сталкивался, для их устранения надо объявить что-нибудь в этой области памяти, у меня например обычно такой варнинг висит:

warning: section _MyProject.out(csm_rsvd) at 03f7f80h falls in unconfigured memory (skipped)

Говорит о том что в памяти для защитного ключа ничего не объявлено, поэтому там будут 0xFFFF, что меня пока устраивает.

 

APP_FLASH1 в вашем случае должно быть именем секции FLASHA.

 

У меня эти два файла сделаны следующим образом:

 

/*
* TMS320F28069U
* Файл распределения памяти
*/


/* Объявляем требуемую для компилятора CLA память и точки входа */
CLA_SCRATCHPAD_SIZE = 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start


MEMORY
{
PAGE 0 :   /* Program Memory */
OTP		 : origin = 0x3D7800, length = 0x000400	 /* on-chip OTP */

RAMFUNCS	: origin = 0x00A000, length = 0x004000	 /* Память программ в ОЗУ L4-L5 */

CLAPROG	 : origin = 0x009000, length = 0x001000	  /* Память программ CLA L3 */

BL_FH	 	: origin = 0x3D8000, length = 0x004000	 /* Память для бутлоадера FLASHH */

FLASHG	  : origin = 0x3DC000, length = 0x004000	 /* можно использовать. используется бутлоадером в безопасном режиме FLASH */

PROGFLASH   : origin = 0x3E4000, length = 0x013F80	 /* ПЗУ программ FLASHA-E */

CSM_RSVD	: origin = 0x3F7F80, length = 0x000076	 /* Program with all 0x0000 when CSM is in use. */
BEGIN	   : origin = 0x3F7FF6, length = 0x000002	 /* Used for "boot to Flash" bootloader mode. */
CSM_PWL	 : origin = 0x3F7FF8, length = 0x000008	 /* CSM password locations in FLASH */

FPUTABLES   : origin = 0x3FD860, length = 0x0006A0	 /* FPU Tables in Boot ROM */
IQTABLES	: origin = 0x3FDF00, length = 0x000B50	 /* IQ Math Tables in Boot ROM */
IQTABLES2   : origin = 0x3FEA50, length = 0x00008C	 /* IQ Math Tables in Boot ROM */
IQTABLES3   : origin = 0x3FEADC, length = 0x0000AA	   /* IQ Math Tables in Boot ROM */

ROM		 : origin = 0x3FF3B0, length = 0x000C10	 /* Boot ROM */
RESET	   : origin = 0x3FFFC0, length = 0x000002	 /* part of boot ROM  */
VECTORS	 : origin = 0x3FFFC2, length = 0x00003E	 /* part of boot ROM  */

PAGE 1 :   /* Data Memory */

M01SARAM	: origin = 0x000000, length = 0x000800	 /* Память стека M0, M1 */
CLADATA	 : origin = 0x008000, length = 0x001000	 /* Память данных CLA L0, L1, L2 */
RAMDATADMA  : origin = 0x00E000, length = 0x006000	 /* Общая память данных, адресуемая через DMA L6-L8 */
PIEVECT	 : origin = 0x000D00, length = 0x000100

FLASH_DATA  : origin = 0x3E0000, length = 0x004000	 /* Память данных для хранения настроек FLASHF */

CLA_CPU_MSGRAM  : origin = 0x001480, length = 0x000080 /* CLA-R/W, CPU-R message RAM */
CPU_CLA_MSGRAM  : origin = 0x001500, length = 0x000080 /* CPU-R/W, CLA-R message RAM */
USB_RAM	 : origin = 0x040000, length = 0x000800	 /* USB RAM		  */
}

/*
*  Allocate sections to memory blocks.
*  Note:
*	  codestart   user defined section in DSP28_CodeStartBranch.asm
*				  used to redirect code execution when booting to flash
*
*	  ramfuncs	user defined section to store functions that will be
*				  copied from Flash into RAM
*/ 

SECTIONS
{
  bl_table			: > 0x3D8000,   PAGE = 0, type = DSECT
  app_table		   : > 0x3F4000,   PAGE = 0

  ramfuncs			: LOAD = PROGFLASH,
					 RUN = RAMFUNCS,
					 LOAD_START(_RamfuncsLoadStart),
					 LOAD_SIZE(_RamfuncsLoadSize),
					 LOAD_END(_RamfuncsLoadEnd),
					 RUN_START(_RamfuncsRunStart),
					 crc_table(_CRCTestVector),
					 PAGE = 0
					 {
					 	-l rts2800_fpu32_fast_supplement.lib(.text)
					 	-l c28x_vcu0_library_fpu32.lib(.text)
					 	-l c28x_fpu_dsp_library.lib(.text)
					 	-l DLC.lib<DLC_runPI.obj>(.text) /* Библиотека содержит функции для CLA, если они нужны, то надо её линковать по объектам */
					 }



  /* Allocate program areas: */
  GROUP			   : > PROGFLASH,	 PAGE = 0, crc_table(_CRCTestVector)
  {
   .cinit
   .pinit
   codestart
   .text
   /* Initalized sections to go in Flash */
   /* For SDFlash to program these, they must be allocated to page 0 */
   .econst
   .switch
  }

  DataFlash		 : > FLASH_DATA  PAGE = 1

  .TI.crctab		 : > PROGFLASH

csmpasswds		  : > CSM_PWL	 PAGE = 0
csm_rsvd			: > CSM_RSVD	PAGE = 0

/* Allocate uninitalized data sections: */
.stack			  : > M01SARAM		PAGE = 1
.ebss			   : > RAMDATADMA	  PAGE = 1
.esysmem			: > RAMDATADMA	  PAGE = 1
.cio				: > RAMDATADMA	  PAGE = 1

/* Initalized sections go in Flash */
/* For SDFlash to program these, they must be allocated to page 0 */
.args			   : > PROGFLASH	   PAGE = 0


  CLAmathTables		: > CLADATA,		PAGE = 1
  CLA1mathTables		: > CLADATA,		PAGE = 1

  Cla1Prog			  :  LOAD = PROGFLASH,
					 RUN = CLAPROG,
					 LOAD_START(_Cla1funcsLoadStart),
					 LOAD_END(_Cla1funcsLoadEnd),
					 RUN_START(_Cla1funcsRunStart),
					 PAGE = 0
					 {
					 	-l cla0_math_library_fpu32.lib(.text)
					 	-l DLC.lib<DLC_runPIc.obj>(.text) 
				 	 }

  ClaToCpuMsgRAM	 	: > CLA_CPU_MSGRAM, PAGE = 1
  CpuToClaMsgRAM	 	: > CPU_CLA_MSGRAM, PAGE = 1
  ClaDataRam		   	: > CLADATA,		PAGE = 1

  .bss_cla			 : > CLADATA,		PAGE = 1
  .const_cla		   : > PROGFLASH,	  PAGE = 0

  CLAmathTables:		 LOAD = PROGFLASH,
					 RUN = CLADATA,
					 LOAD_START(_Cla1mathTablesLoadStart),
					 LOAD_END(_Cla1mathTablesLoadEnd),
					 RUN_START(_Cla1mathTablesRunStart),
					 LOAD_SIZE(_Cla1mathTablesLoadSize),
					 PAGE = 1

  CLAscratch		  :
					 { *.obj(CLAscratch)
					 . += CLA_SCRATCHPAD_SIZE;
					 *.obj(CLAscratch_end) } > CLADATA,
					 PAGE = 1

/* Allocate IQ math areas: */
IQmath			  : > PROGFLASH   PAGE = 0			/* Math Code */
IQmathTables		: > IQTABLES	PAGE = 0, TYPE = NOLOAD

/* Allocate FPU math areas: */
FPUmathTables	   : > FPUTABLES   PAGE = 0, TYPE = NOLOAD
}

 

Файл настройки создания HEX файла:

_MyProject.out
--intel
--image
--order=MS
--romwidth=16
--memwidth=16
--fill=0xFFFF



ROMS
{
    PROGFLASH : origin = 0x3E4000, length = 0x13F80, files = { _MyProject.hex }

}

 

Использование секции ПЗУ данных в коде выглядит примерно так:

#pragma DATA_SECTION(SettingsInFlash,"DataFlash");
s_SettingsInFlash SettingsInFlash;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня есть своя секция, она с константами, обьявлена на PAGE0 во FLASHH, при трансляции в hex всё нормально, теперь переношу FLASHH на PAGE1 и всё, пишет такое же предупреждение, но она же не пустая, может нужно что то дополнительно прописать в командном файле для трансляции в hex c PAGE1? А APP_FLASH1 задал специально большой, чтобы покрыло все сектора FLASH, потому что используется А, B, D, E, H, и чтобы не писать несколько строк вообщем-то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...