完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
如题,程序通过SPI模式能将例程中的二进制.bin文件烧到串行flash中,并能自举,程序运行也正常,但自己通过转换的二进制文件不能自举。由于例程只提供了.bin文件,没有提供具体的转换命令,转换命令是参照资料写的。请高手过来看看指导指导。
这是转换的cmd文件,程序入口地址,通过查看map,确定是0x100没错,程序只有3k,flash用的是AT26df321. -boot -v5510:2 -serial8 -map bootloader.map -e 0x100 -b -o bootloader.bin bootloader.out 还有个问题就是程序如果比较大,内部ram不够的情况下,加载到外部RAM中,是不是只要在程序的CMD文件中,将text段放在外部RAM的空间区域?相当与程序入口地址在外部RAM空间? 希望各位不吝赐教,谢谢! |
|
相关推荐
20 个讨论
|
|
|
你写的hex cmd文件没什么问题, 查看一下HEX55.exe版本是不是2.10以上的版本?
查看一下bootloader.map, .cinit段正确吗? 工程在编译的时候不要用-cr选项. 查看一下GEL文件中对板子的初始化设置是否搬移到应用程序中? 用仿真器跟一下程序, 看是程序是否正确boot进来? 是否能从程序入口地址_c_int00开始执行? 执行到哪里出错? 关于第二个问题, RAM不够的话, 在cmd文件中将.text段定义到外部RAM就可以了. 程序入口地址也在外部RAM空间, 你可以通过查看.map文件中的entry point address. |
|
|
|
|
|
|
|
vuywsdfwf 发表于 2019-10-29 10:55 还是没解决自举问题,hex55.exe的版本和GEL文件我都查看了没问题。难道烧写时的程序CMD像2000系列要要做相应的修改。 这是下载程序的CMD文件: -w -stack 500 -sysstack 500 -l rts55x.lib MEMORY [ PAGE 0: MMR : origin = 0000000h, length = 00000c0h SPRAM : origin = 00000c0h, length = 0000040h VECS : origin = 0000100h, length = 0000100h DARAM0 : origin = 0000200h, length = 0003E00h DARAM1 : origin = 0004000h, length = 0004000h DARAM2 : origin = 0008000h, length = 0004000h DARAM3 : origin = 000c000h, length = 0004000h SARAM0 : origin = 0010000h, length = 0004000h SARAM1 : origin = 0014000h, length = 0005000h SARAM2 : origin = 0019000h, length = 0003000h ] SECTIONS [ .vectors : [] > VECS PAGE 0 /* interrupt vector table */ .cinit : [] > SARAM0 PAGE 0 .text : [] > SARAM1 PAGE 0 isrs : [] > SARAM2 PAGE 0 .stack : [] > DARAM0 PAGE 0 .sysstack: [] > DARAM0 PAGE 0 .sysmem : [] > DARAM0 PAGE 0 .data : [] > DARAM1 PAGE 0 .bss : [] > DARAM1 PAGE 0 .const : [] > DARAM1 PAGE 0 .cio : [] > DARAM2 PAGE 0 .csldata: [] > DARAM0 PAGE 0 ] 转换成BIN后生成的map文件如下: NPUT FILE NAME: OUTPUT FORMAT: Binary PHYSICAL MEMORY PARAMETERS Default data width : 8 Default memory width : 8 Default output width : 8 BOOT LOADER PARAMETERS Table Type: SERIAL PORT (McBSP 8 bit Mode) Entry Point: 0x00014000 OUTPUT TRANSLATION MAP -------------------------------------------------------------------------------- 00000000..00ffffff Page=0 Memory Width=8 ROM Width=8 -------------------------------------------------------------------------------- OUTPUT FILES: bootloader.bin [b0..b7] CONTENTS: 00000000..000006b3 BOOT TABLE .cinit : dest=00010000 size=000000de width=00000001 .text : dest=00014000 size=000005b1 width=00000001 -------------------------------------------------------------------------------- 00000000..00ffffff Page=1 Memory Width=8 ROM Width=8 "*DEFAULT PAGE 1*" -------------------------------------------------------------------------------- NO CONTENTS 从这两个文件看.cinit段好像也没问题啊。 |
|
|
|
|
|
|
|
站着幻想 发表于 2019-10-29 11:15 cmd文件不用C2000那样修改, 因为C55x片上没有flash. 你的程序在仿真器下调试是通过的吧? 你是怎么执行hex cmd文件的? 从map文件看, Entry Point: 0x00014000和你hex cmd文件中的-e 0x100不符啊? 而且.vectors段也没转, 你在工程文件中.vectors段使用.sect定义成initialized section么? |
|
|
|
|
|
|
|
|
程序仿真通过了的,我就编写了个简单的方波输出函数。后面发的那个map和CMD是昨天调试修改后的,入口地址改成了hex cmd文件中的地址。 hex cmd: bootloader.out -boot -v5510:2 -serial8 -e 0x00014000 -reg_config 0x1c00,0x2180 -delay 0x100 -b -map bootloader.map -memwidth 8 -romwidth 8 -o bootloader.bin 我就写了个批处理执行hex cmd文件: del bootloader.map del bootloader.bin hex55 HEX2BIN.cmd pause 执行后的map文件就只有 .cinit : dest=00010000 size=000000de width=00000001 .text : dest=00014000 size=000005b1 width=00000001 这两个段。 |
|
|
|
|
|
|
|
vuywsdfwf 发表于 2019-10-29 11:49 在仿真情况下,程序的入口地址是从_c_int00开始执行的。我的程序没有用到中断,所以没有用.sect伪指令定义.vectors段.程序的cmd中我是按照习惯添加了“ .vectors : [] > VECS PAGE 0 ”这句。不加这句在仿真情况下程序也能正常跑。好像cmd中没有用到的段,在通过hex cmd转换后,不会在转换生成的map文件中出现。 |
|
|
|
|
|
|
|
站着幻想 发表于 2019-10-29 12:09 仿真情况下观察到的程序的入口地址和通过hex cmd转换后的.text段的起始地址不一致,例如:通过仿真器查看的入口地址是:0001062f,而实际上hex cmd转换后的map中的.text段的起始地址为:000100e0。我后面将entry point修改成了仿真情况下程序的入口地址,也不行。并且我发现如果在hex cmd中不用-e _c_int00指令的话,他会默认生成仿真情况下观察到的程序的入口地址。但我在一本书上看到的,却是要将entry point的地址修改成和.text段的起始地址一样。 |
|
|
|
|
|
|
|
vuywsdfwf 发表于 2019-10-29 11:49 感谢Shine的耐心指导,终于解决了这个问题。是两个原因造成的自举失败。都是你上面提到的几点里面的。 第一是:程序入口地址问题。不能单纯的.map文件中的entry point地址写成map文件中的text段的起始地址,而要写成_c_int00;这个我被一本参考资料误导了。 第二个问题是:hex55.exe版本造成的。我原来用的是ccs2.2里面的hex55.exe,在你指出hex55.exe版本可能存在问题的时候,我还特意看了下hex55.exe的属性,显示的版本是Hex Converter v3.3.2。在修改了第一个问题后发现还是不能自举成功,我索性改装ccs3.3,改用了里面的hex55.exe,最终自举成功。CCS3.3版本里的hex55.exe貌似也是Hex Converter v3.3.2,这个我就不知道怎么回事了。 自举成功了也不用想他了,谢谢Shine!! |
|
|
|
|
|
|
|
站着幻想 发表于 2019-10-29 12:30 恭喜调试成功! 谢谢分享经验! hex55.exe如果是3.3.2版本的话, 应该没问题. 有兴趣的话, 可以试试把ccs2.2里生成的.out文件用CCS3.3的hex55.exe工具转, 看是CCS选项配置问题还是hex版本问题. |
|
|
|
|
|
|
|
vuywsdfwf 发表于 2019-10-29 10:55 您好,有一个问题想请教您,是这样的,我用5509A的开发板烧写我自己写的程序到开发板上的flash自举没有问题,程序可以正常运行,但是同样的程序烧写到我自己的板子上的flash时,显示烧写成功,但是程序并没有运行。板子上flash的电路是照着开发板画的,DSP和flash芯片型号也跟开发板上的一样,我也互换过flash,效果一样,真不知道是什么原因,还望您不吝赐教!flash芯片用的是AT25F1024N-10SI-2.7。 |
|
|
|
|
|
|
|
taitoukantian 发表于 2019-10-29 13:12 Boot mode管脚都设置好了? 你要什么样的源程序?现在代码能正确烧写到flash么? 另外,麻烦另起新帖吧,也方便其他客户参考。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1723浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:29 , Processed in 1.340187 second(s), Total 95, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1819