[求助] 關於程序在FLASH的燒寫區域,及生成HEX檔

nt52241930   2017-6-29 09:11 楼主
請教各位 我使用CCS對我目標板先載入程序後,功能都OK 在使用CCS生成INTEL的HEX檔 之後使用K-FLASH軟件,查看目標板內芯片的FLASH值 發現由CCS生成的HEX檔與從芯片讀出的FLASH值,明顯不同 想請教各位,這種情況是為什麼?? 有方式可以確認CCS生成的HEX檔嗎?? 以上 謝謝 本帖最后由 nt52241930 于 2017-6-29 09:19 编辑

回复评论 (10)

我也不太懂,你可以把hex烧进去,再读出来,再比较一下
点赞  2017-6-29 10:24
欢迎同胞。
我来回答您的问题:
1、首先关于您提到的intel的hex。确实是的,现在绝大多数IDE生成的hex都是intel的hex格式的;

2、K-FLASH这个软件应该是周立功或者致远电子的;

3、有关HEX文件的格式,请参考我如下帖子中的回复,回复的内容在72楼(这个当中我有认真的回复这个HEX的格式,希望
对楼主你的理解有所帮助):

https://bbs.eeworld.com.cn/forum. ... 4&page=4#pid2088730


还有K-FLASH。这个软件我看了下,这个软件如果你读取flash的内容,还是要看地址的(图片中紫色方框所示):
如HEX文件的起始地址是0x08000000.
那么你K-FLASH的读取地址也应该是0x08000000。

http://www.cr173.com/soft/219462.html


11111.png



点赞  2017-6-29 11:19
引用: huaiqiao 发表于 2017-6-29 11:19 欢迎同胞。 我来回答您的问题: 1、首先关于您提到的intel的hex。确实是的,现在绝大多数IDE生成的hex都 ...
您好 : 我會再仔細查看您的資料, 先詢問您些問題 我有確認過 CCS 生成的MAP文件,以TM4C 我使用這顆芯片 FLASH 從 0X0000 0000 ~ 0X0004 0000 基本上都跟使用K-FLASH讀出來的數據 一樣 現在,在於,CCS 到底該生成什麼樣子的檔,才能符合 MAP裡的FLASH 格式 我在TRY TRY 謝謝 補充 : 剛剛已看完您的文章,並對了一下我CCS生成的HEX檔,大概沒問題 應該是格式問題 剛使用CCS 生成.BIN後 基本上就能直接使用 起始位址 與 結束位址 皆正確 只是校驗後 還是有12BYTE錯誤 經查MAP後 發現於此處 00011354 00000090 gpio.obj (.const:g_pui32GPIOBaseAddrs) GPIO部分造成的錯誤 ,此處還在查原因 若您知道,再麻煩幫助一下 謝謝 本帖最后由 nt52241930 于 2017-6-29 14:21 编辑
点赞  2017-6-29 13:06
引用: nt52241930 发表于 2017-6-29 13:06
您好 :

我會再仔細查看您的資料,
先詢問您些問題

我有確認過 CCS 生成的MAP文件,以TM4C 我使用這 ...

1、“CCS 到底該生成什麼樣子的檔,才能符合 MAP裡的FLASH 格式”。
---->CCS我自己没用过,我是嫌它安装起来太大了。
我可能用MDK比较多。像MDK的话,会生成memory map格式的“类似内存映射”的文件。
我其实没懂,你说的MAP里的FLASH格式。

2、我还有问题,为什么一定要用K-FLASH?
--->是不是量产的时候要用这个软件来烧录hex或者bin文件呢。
像量产的话,IAP也是可以的。ti公司应该有相关的IAP的文档呢。
还有,像TI的产品。
如下两个网站也可以多上上呢。
http://e2e.ti.com/

http://www.deyisupport.com

还有像MDK官网也有关系HEX文件格式的说明:
http://www.keil.com/support/docs/1584/
点赞  2017-6-29 14:34
引用: nt52241930 发表于 2017-6-29 13:06
您好 :

我會再仔細查看您的資料,
先詢問您些問題

我有確認過 CCS 生成的MAP文件,以TM4C 我使用這 ...

“剛使用CCS 生成.BIN後
基本上就能直接使用
起始位址 與 結束位址 皆正確

只是校驗後 還是有12BYTE錯誤”

----->这个你是怎么知道的?是通过K-FLASH烧录的时候发现的?
需要提醒的是,我看了如下K-FLASH的使用文档,这个K-FLASH软件,好像软件还有自己的加校验的功能
所以,您在对这个软件在做一些操作的时候需要注意哦。

https://wenku.baidu.com/view/6af428dee45c3b3566ec8b35.html

还有,您提到的这个MAP。因为我没有用过CCS,所以我没办法给您详细的解答,这个不好意思。

“經查MAP後 發現於此處   00011354    00000090     gpio.obj (.const:g_pui32GPIOBaseAddrs)”,这个您再检查下,GPIO操作的相关的代码,看看是不是您在哪里的操作不合适呢。
点赞  2017-6-29 14:44
引用: huaiqiao 发表于 2017-6-29 14:44
“剛使用CCS 生成.BIN後
基本上就能直接使用
起始位址 與 結束位址 皆正確

只是校驗後 還是有12BYTE ...

感覺只是因為 單純.HEX 跟 .BIN 格式不同
造成KFLASH無法正確識別

在KFLASH裡有提供您的燒錄源檔(.BIN)跟您燒錄後KFLASH從芯片FLASH 讀出的檔案
提供燒錄人員 查看 是否1致(剛是看到FLASH內GPIO範圍有錯)

剛剛在經過一些調整 , 目前應該屬於正常,
嘗試過幾次抹除,及燒錄後校正,都算正常

只是在燒錄前,最好將芯片FLASH都抹除在燒錄
否則可能造成 部分值異常
点赞  2017-6-29 14:52
引用: nt52241930 发表于 2017-6-29 14:52
感覺只是因為 單純.HEX 跟 .BIN 格式不同
造成KFLASH無法正確識別

在KFLASH裡有提供您的燒錄源檔(.BI ...

1、HEX和BIN文件是在格式上稍有差异。
但是同一个工程,同一个编译器,不管生成HEX文件,还是BIN文件,它烧录后。效果还是一样的。

2、BIN格式的烧录原档,和KFLASH從芯片FLASH 讀出的檔案本来就不一样。
如在烧录原档的BIN格式的文件中是有校验码这些的;而在你用KFLASH從芯片FLASH 讀出的檔案,这个读取出来的的档案是没有校验码的。这个你要搞清楚哦;

3、“只是在燒錄前,最好將芯片FLASH都抹除在燒錄”
--->针对这个其实看你程序的大小。
如A程序烧录到FLASH中,是从0X0000 0000 ~ 0X0003 0000;
但是B程序抄录到FLASH中,是从0X0000 0000 ~ 0X0002 0000;

那么你如果先烧录了A程序,然后再去烧录B程序,是会存在有些地方没有擦除的现象。

但是也不必担心,这个其实与烧录软件有关系。有些烧录软件是有这个在烧录时先擦除全部FLASH的
这个选项的。

当然,您用的是TM4C.全部擦除flash会不会有不好的影响,这个我还真说不好。
点赞  2017-6-29 15:07
引用: huaiqiao 发表于 2017-6-29 15:07 1、HEX和BIN文件是在格式上稍有差异。 但是同一个工程,同一个编译器,不管生成HEX文件,还是BIN文件, ...
1. 我使用同一個程序生成的HEX 和 BIN,在燒錄器上的緩衝區看 確實差異很大, 補充 : 在CCS上,BUILD -> STEP -> 打上生成HEX 碼 與 CCS使用 HEX UTILITY 生成的HEX 不同,這不知道為什麼!!?? 2.關於這部分,我也不是很確認 但是我目前使用BIN檔載入後從燒錄器緩衝區看數據 , 之後將此BIN檔燒錄後,再從芯片FLASH讀回 在緩衝區比對下,確實正確一致 (我猜測 檢驗碼 / 位址碼..等 有可能在芯片FLASH裡有保存,也有可能透過燒 錄器將此部分移除後燒錄...等情況) 3.確實如您所說, 但是我試起來卻是連前面位址的數據都改變了,不只是像您說的大程序變小程序,遺留大程序 後面部分 4.在FLASH 是否全部擦除下有不好影響,這點 , 我原先也是有點擔心 但是 在我拿了幾顆乾淨的芯片直接讀取FLASH後 , 以及使用CCS 編譯器燒錄程序後 , 及燒錄器燒錄後 確實都1致,這點應該是OK 本帖最后由 nt52241930 于 2017-6-29 16:31 编辑
点赞  2017-6-29 16:07
引用: nt52241930 发表于 2017-6-29 16:07
1. 我使用同一個程序生成的HEX 和 BIN,在燒錄器上的緩衝區看 確實差異很大,
  補充 : 在CCS上,BUILD ->  ...

1、关于楼主您补充的第一点,不好意思我没用过CCS,没办法做具体的回答;

这个您可百度下,或者上我给你的TI的那两个网站看看呢
点赞  2017-6-29 22:20
您好,我想读取tm4c1290的flash代码,是否加密了,能否读的出程序
点赞  2018-3-15 09:47
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复