完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-13 16:24 编辑
小弟是使用ti原廠的 Delfino C28346 DIM168 Experimenter's Kit 帶有XDS100仿真器,並按照下列步驟進行 I2C Boot (不過網路上相關資料實在太少了) 1.利用C:CCStudio_v3.3C2000cgtoolsbin目錄下的hex2000.exe將 *.out 檔轉成 *.a00檔 用以下指令 hex2000 project.out -boot -o project.a00 -i2c8 -i2cpsc 29 -i2cclkh 5 -i2cclkl 10 -a (project.out 於連接XDS100仿真器時有成功運行過) 2.修改TI原廠的 i2c_eeprom 範例,將上述 project.a00 的數據從 0x0000 位址開始寫入板上外擴的EEPROM中,總共 5152 bytes,每寫入8 bytes,隨後都有讀取是否正確 (其實是將*.a00內的值宣告成陣列的方式寫入 Uint16 fp[]=[ 0xAA,0x08,0x1D,0x00,0x05,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0xD4,0xA6,........]; ) 3.寫入完畢後斷電,將SW1的Jump扳為 I2C EEPROM Boot GPIO-87: 1 GPIO-86: 1 GPIO-85: 0 GPIO-84: 0 4.上電 不過結果卻無法運行 請問有哪位大大有成功進行I2C Boot的,若要由I2C啟動運行程序的話,是直接將*.a00的資料由0x0000地址逐一寫入,還是須要進行其他配置? 謝謝 |
|
相关推荐
10个回答
|
|
用I2C写入的时候会不会存在问题?我之前用I2C页写的时候就是中间间断了,使得不能bootload。
|
|
|
|
楼主可能有误解,DSP的I2C Boot模式是指由其他上位机按照一定通讯协议通过I2C给DSP传输数据,DSP本身不会去读取外部EEPROM的。
典型的应用时芯片烧写设备通过DSP的Boot模式给芯片烧写程序。 具体BOOT的使用请楼主参考芯片手册关于BOOT ROM的描述。 |
|
|
|
009712 发表于 2018-6-13 06:15 我不赞同楼上的说法。TI测试版上I2C外扩了一块EEPROM,在以I2C BOOT的时候,是可以将存储于其中的程序上电自举的,并不需要其他的烧写设备。 |
|
|
|
jinbiao 发表于 2018-6-13 06:27 非常感謝 BIN YAO1 大大與 Terry Deng 大大的回覆 關於頁寫部份,一開始使用每次寫入14 bytes的方式(不知為何若改為每次寫入16 bytes,程式就會在寫入的副程式中當住,FIFO深度應有16 bytes),在第一頁最後一次寫入時(位址 0x007E開始),因為超出每頁的128 bytes(其實當時不知道每頁的大小,因為第一次接觸EEPROM),所以第129個值就會比對錯誤,TI原廠範例中的FailCount就會檢測出來,(因為產生回捲??) 最後改為每次寫入8 bytes的方式(128 bytes的因數,可以完整寫完每一頁),當程序完全寫入後,TI原廠範例中的PassCount與寫入的數量是相符合的,並且沒有FailCount,而且I2cMsgIn1.MemoryHighAddr、I2cMsgIn1.MemoryLowAddr、I2cMsgOut1.MemoryHighAddr、I2cMsgOut1.MemoryLowAddr寄存器也都符合設定值,所以照理來說應該沒有寫入錯誤的問題。 另外剛才拜讀了 BIN YAO1 大大以前發布的文章,似乎您去年也曾經做過 I2C Boot 的相關測試,不知最後是否有成功運行呢,能否提供一下相關的經驗? 小弟以前也曾使用過28035及28335,但因為速度的要求,所以才會一路換到28346。 而之前因為核心內部含有Flash,所以要脫離仿真器運行,只要用CCS燒進Flash就好,不過CMD文件要換成Flash使用的,不知使用I2C Boot是否也要替換呢?以及小弟的步驟是否有問題? 謝謝 |
|
|
|
Topcbpcba 发表于 2018-6-13 06:41 for(;;) [ for (i=0;i<128;i++) [ c=i+b*128; Data=a[c]; ] if (b%2==0) [ I2C_EEPROM_LOW_ADDR=0x00; write(); DELAY_US(DELAY); b++; I2CA_Init(); ] else if (b%2==1) [ I2C_EEPROM_LOW_ADDR=0x80; write(); DELAY_US(DELAY); I2C_EEPROM_HIGH_ADDR++; b++; I2CA_Init(); ] if (c>7740) [ pass(); ] void write(void) [ I2caRegs.I2CSAR = I2C_SLAVE_ADDR; //Set slave address I2caRegs.I2CCNT = I2C_NUMBYTES + 2; //Set count to 5 characters plus 2 address bytes I2caRegs.I2CDXR = I2C_EEPROM_HIGH_ADDR; //Send eeprom high address I2caRegs.I2CMDR.bit.TRX = 1; //Set to Transmit mode I2caRegs.I2CMDR.bit.MST = 1; //Set to Master mode I2caRegs.I2CMDR.bit.FREE = 1; //Run in FREE mode I2caRegs.I2CMDR.bit.STP = 1; //Stop when internal counter becomes 0 I2caRegs.I2CMDR.bit.STT = 1; //Send the start bit, transmission will follow while(I2caRegs.I2CSTR.bit.XRDY == 0)[]; //Do nothing till data is shifted out I2caRegs.I2CDXR = I2C_EEPROM_LOW_ADDR; //Send eeprom low address for(i = 0; i < I2C_NUMBYTES; i++)[ while(I2caRegs.I2CSTR.bit.XRDY == 0)[]; //Do nothing till data is shifted out I2caRegs.I2CDXR = Data; //Send out the message ] ] void pass() [ asm(" ESTOP0"); for(;;); ] 这是我从程序里提出来的,其中for循环式在主函数中执行的,a数组用于存放bootload的8位数据。判断进入pass函数的条件取决于a数组的大小。 |
|
|
|
非常感謝 BIN YAO1 大大的回覆,小弟會試試看 另外關於小弟將 *.out 檔轉為bootload數據的方式是否有誤呢? 謝謝 |
|
|
|
我是按照固化在芯片内部速率来配置的,即i2cclkh和i2cclkl都为54,而i2cpsc为0,拨码开关拨至0010。但是我试过即使配置为i2cpsc为1,拨码为1100也能自举。所以我现在对i2cpsc这个值还不能很清楚。我的command是: -a -boot -i2c8 -i2cpsc 0 -i2cclkh 54 -i2cclkl 54 如果你是用CCSv4的话,在生成.out文件的同时,也可以直接生成.hex也就是你这里的.a00文件。 |
|
|
|
jinbiao 发表于 2018-6-13 07:20 非常感謝 BIN YAO1 大大的協助 將command改成 -a -boot -i2c8 -i2cpsc 1 -i2cclkh 54 -i2cclkl 54 後,還是無法啟動,最後檢查電路才發現,原來原廠板子上的JUMP扳為ON是0,OFF才是1,扳成正確的1100後,已經可以正常由EEPROM啟動運行了,不須連接仿真器 謝謝 |
|
|
|
Topcbpcba 发表于 2018-6-13 07:29 你好,我最近在做I2C eeprom自启动。我也是按照上边的步骤去做的 但是boot没有成功,请问TI原厂的例程里I2cMSg的数据定义都是Uint16,但是实际的高位地址和低位地址都是八位,这是为什么呢? 请多指教,这个地方没有搞懂,不知道是不是I2C写数据没有成功 |
|
|
|
q10086333 发表于 2018-6-13 07:44 对于DSP而言,定义8位数据和定义16位的数据效果是一样的,都会表现为16位数据,因此定义Uint16是没有什么问题的。 要想观察I2C写数据是否成功,可以将数据读回来,观察是否正确。 在I2C写操作的时候,你是按照我上面那段程序进行写的吗?还是在TI例程的基础上修改的?在.out转换为.hex文件的时候,是否会有问题? |
|
|
|
只有小组成员才能发言,加入小组>>
334 浏览 1 评论
528 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
773 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
649 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1126 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
56浏览 29评论
123浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
251浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
200浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
56浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:28 , Processed in 0.913087 second(s), Total 62, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号