ELEKTROS 0 13 июня, 2015 Опубликовано 13 июня, 2015 · Жалоба 1) При построении проекта в CCS поставил генерацию *.hex файла прошивки. 2) До какого то момента (пока проект не стал большим) *.hex файл прошивал сторонним загрузчиком C2Prog. 3) После того как проект стал больше (насколько незнаю не уловил этот момент) *.hex файл зашивается в контроллер, но контроллер после сброса запускать программу отказывается. (пробывал отмечать все 8-мь секторов памяти в ручную для прошивки) 4) Запуская прошивальшик UniFlash подсовывая ему файл прошивки но в формате *.out всё прошивается и контроллер нормально запускается после сброса. Кто нибудь сталкивался с такой проблемой? Может в C2prog есть ограничение в бесплатной версии на размер прошиваемого файла или hex в CCS не всегда корректно компилируетcя? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 14 июня, 2015 Опубликовано 14 июня, 2015 (изменено) · Жалоба 2) До какого то момента (пока проект не стал большим) *.hex файл прошивал сторонним загрузчиком C2Prog. А сколько раз? ЧТо там с количеством перезаписей FLASH? upd: посмотрел - теперь десятки тысяч циклов... не оно. Изменено 14 июня, 2015 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 14 июня, 2015 Опубликовано 14 июня, 2015 (изменено) · Жалоба Flash не затёрта если вы об этом. Вопрос в другом совсем: C2prog что то не дошивает, либо hex неправильно скомпиленный, хотя hex нормально компилиться с меньших проектов и зашивается. Проблема чисто програмная, но вот в каком месте? Изменено 14 июня, 2015 пользователем ELEKTROS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prst 0 14 июня, 2015 Опубликовано 14 июня, 2015 · Жалоба 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, так что попробуйте использовать готовый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 14 июня, 2015 Опубликовано 14 июня, 2015 · Жалоба PrSt, т.е. вы считаете что CCS неправильно генерирует hex файл, правильно я понял? Зачем мне bin to hex, если я получаю сразу hex при соответствующей настройке проекта? Бинарник я залить с помощью C2prog не могу, там только hex. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prst 0 14 июня, 2015 Опубликовано 14 июня, 2015 · Жалоба PrSt, т.е. вы считаете что CCS неправильно генерирует hex файл, правильно я понял? Зачем мне bin to hex, если я получаю сразу hex при соответствующей настройке проекта? Бинарник я залить с помощью C2prog не могу, там только hex. нет, я считаю что вы могли поставить какую-то ненужную галочку для хекса, хотя я искренне сомневаюсь, но и исключать нельзя. Я предложил альтернативный метод, а уж пробовать его или нет, это вы сами вольны. ) А почему вы не прошиваете при помощи CCS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 14 июня, 2015 Опубликовано 14 июня, 2015 · Жалоба Да дело в том что там всего один комбобокс выбрать надо чтобы hex генерился, вот и думаю может есть еще какие настройки, которых я не вижу в CCS v5 (если проблема в этой части конечно). Прошить могу и с помощью Uniflash, который кстати встроен в CCS, но допустим я хочу чтобы какой нибудь техник-программист мог прошивать контроллеры без моего участия или обновлять софт при необходимости, не разворачивать же ему на ноуте всю среду с проектами чтобы это делать, а C2prog проще некуда, чтобы ему это сделать. Конечно в этом случае самый оптимальный вариант написать свой загрузчик по какому нибудь интерфейсу, но особого времени на это нету, да и проблема остро не стоит, а готового нету тоже (такого чтобы можно было прикрутить к своему проекту без особого гемороя). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 19 июля, 2015 Опубликовано 19 июля, 2015 · Жалоба Вот два файла *.out и *.hex. Сгенерированные из одного проекта, но hex толи не так зашивается, толи неправильно сгенерирован. Кто проверит может соответствие. pack.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 17 сентября, 2015 Опубликовано 17 сентября, 2015 · Жалоба выяснил наконец-то, что hex генерируется неправильно, но почему понять не могу, там настроек то и нету для этого, чтобы что то было не так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TSS 0 17 сентября, 2015 Опубликовано 17 сентября, 2015 · Жалоба Ошибаетесь, настроек там очень и очень много. Описание формата можно прочесть в файлике spru513 (TMS320C28x Assembly Language Tools) раздел Hex Conversion Utility Description. Настроить лучше всего через *.cmd файл, например так: Примеры можно глянуть в controlSUITE для контроллеров с USB, f2806x например, проект bl_app. А в CCS6 появился отдельный раздел в меню, для генерации этого Hex файла, те же ключи и адреса, только в другом оформлении: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 18 сентября, 2015 Опубликовано 18 сентября, 2015 · Жалоба Ну так combobox как на первой картинке (Create flash image: Intel-HEX) выбираю и всё остальное пишеться автоматом. В частности в командная строка заполняется: "${CG_TOOL_HEX}" -i "${BuildArtifactFileName}" -o "${BuildArtifactFileBaseName}.hex" -order MS -romwidth 16 А в вашем cmd смотрю есть еще какие границы во flash использовать. Как вариант возможно используется где-то cmd по умолчанию и в нём эти границы прописаны не все (это подтвердило бы почему на некоторых проектах не сильно больших hex генерируется правильно у меня). Спасибо за наводку, теперь хоть есть направление куда копать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 19 сентября, 2015 Опубликовано 19 сентября, 2015 · Жалоба 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. Сталкивались с таким? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TSS 0 19 сентября, 2015 Опубликовано 19 сентября, 2015 · Жалоба .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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ELEKTROS 0 20 сентября, 2015 Опубликовано 20 сентября, 2015 · Жалоба У меня есть своя секция, она с константами, обьявлена на PAGE0 во FLASHH, при трансляции в hex всё нормально, теперь переношу FLASHH на PAGE1 и всё, пишет такое же предупреждение, но она же не пустая, может нужно что то дополнительно прописать в командном файле для трансляции в hex c PAGE1? А APP_FLASH1 задал специально большой, чтобы покрыло все сектора FLASH, потому что используется А, B, D, E, H, и чтобы не писать несколько строк вообщем-то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться