TI中文支持网
TI专业的中文技术问题搜集分享网站

DSP28062通过串口更新程序

大家好,现在在用DSP28062这款芯片,通过串口更新程序。思路是:将引导程序放在Flash A区域,将要更新的功能代码放在Flash F区,目前用9600波特率和14400波特率更新程序都可以正常工作,但是再用38400波特率的时候就无法把功能程序成功下载到FLash 里面,经过调试,当DSP引导程序通过接收到第一段代码都是正确的,就是无法判断Flash_Program(Flash_ptr,Buffer,Length,&FlashStatus);(备注:#define Flash_Program(a,b,c,d)    Flash2806x_Program(a,b,c,d),extern Uint16  Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus);)有没有正确执行;以为是.cmd配置除了问题,但是怎么改都没用,已经一个礼拜了,求大神指导啊,附件是。cmd配置

Eric Ma:

你说用9600和14400都可以正常工作,指的是能够正常烧写程序并运行吗?

如果波特率过高,存在的问题是,是否芯片有正确通过串口接收到数据,还有Flash烧写的速度本来就不快,是否出现数据覆盖?

如果不成功,就表示flash数据不对,你就要检查你的代码逻辑。

ERIC

大家好,现在在用DSP28062这款芯片,通过串口更新程序。思路是:将引导程序放在Flash A区域,将要更新的功能代码放在Flash F区,目前用9600波特率和14400波特率更新程序都可以正常工作,但是再用38400波特率的时候就无法把功能程序成功下载到FLash 里面,经过调试,当DSP引导程序通过接收到第一段代码都是正确的,就是无法判断Flash_Program(Flash_ptr,Buffer,Length,&FlashStatus);(备注:#define Flash_Program(a,b,c,d)    Flash2806x_Program(a,b,c,d),extern Uint16  Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus);)有没有正确执行;以为是.cmd配置除了问题,但是怎么改都没用,已经一个礼拜了,求大神指导啊,附件是。cmd配置

Zhengrong li:

回复 Eric Ma:

您好,感谢您的关注和回答。是可以通过9600和14400正常烧写程序并运行的。然后在38400烧写时也是能够正常通过串口接收数据的。因为DSP的代码段被分为一‘块’一‘块’,然后在接收第一‘块’的时候,收到的关键字,第一块要存入的地址以及‘块’的长度都是正确的。附件为通过串口接收数据和copy数据到flash的代码,还是没有看出问题出在哪里。芯片型号为28062

大家好,现在在用DSP28062这款芯片,通过串口更新程序。思路是:将引导程序放在Flash A区域,将要更新的功能代码放在Flash F区,目前用9600波特率和14400波特率更新程序都可以正常工作,但是再用38400波特率的时候就无法把功能程序成功下载到FLash 里面,经过调试,当DSP引导程序通过接收到第一段代码都是正确的,就是无法判断Flash_Program(Flash_ptr,Buffer,Length,&FlashStatus);(备注:#define Flash_Program(a,b,c,d)    Flash2806x_Program(a,b,c,d),extern Uint16  Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus);)有没有正确执行;以为是.cmd配置除了问题,但是怎么改都没用,已经一个礼拜了,求大神指导啊,附件是。cmd配置

Zhengrong li:

回复 Eric Ma:

您好,关于你说的数据覆盖,在我之前写这个功能的程序的时候,是把引导程序直接写入RAM,然后将功能代码copy到FLASH,在这种情况下,38400也是可以工作的。但是,现在打算把引导程序放在Flash A,而把功能代码copy到FLASH F,这个时候38400就不行了。这两个版本间,改动的一个地方就是cmd文件,还有就是将引导程序写入FLASH A之后因为无法再FLASH A里面对FLASH F进行操作,所以需要把引导程序在运行的时候复制到RAM里面,所以我怀疑是不是cmd文件影响了功能。

大家好,现在在用DSP28062这款芯片,通过串口更新程序。思路是:将引导程序放在Flash A区域,将要更新的功能代码放在Flash F区,目前用9600波特率和14400波特率更新程序都可以正常工作,但是再用38400波特率的时候就无法把功能程序成功下载到FLash 里面,经过调试,当DSP引导程序通过接收到第一段代码都是正确的,就是无法判断Flash_Program(Flash_ptr,Buffer,Length,&FlashStatus);(备注:#define Flash_Program(a,b,c,d)    Flash2806x_Program(a,b,c,d),extern Uint16  Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus);)有没有正确执行;以为是.cmd配置除了问题,但是怎么改都没用,已经一个礼拜了,求大神指导啊,附件是。cmd配置

Eric Ma:

回复 Zhengrong li:

你说把引导程序放在flash?

注意一点,所有对flash操作的代码,需要在RAM上运行,即flash erase, program, verify等函数需运行在RAM。

其次,你的代码里是否有在烧写完flash后对上位机进行应答呢?防止你还没烧写完,但是上面又发新的数据过来。

ERIC

大家好,现在在用DSP28062这款芯片,通过串口更新程序。思路是:将引导程序放在Flash A区域,将要更新的功能代码放在Flash F区,目前用9600波特率和14400波特率更新程序都可以正常工作,但是再用38400波特率的时候就无法把功能程序成功下载到FLash 里面,经过调试,当DSP引导程序通过接收到第一段代码都是正确的,就是无法判断Flash_Program(Flash_ptr,Buffer,Length,&FlashStatus);(备注:#define Flash_Program(a,b,c,d)    Flash2806x_Program(a,b,c,d),extern Uint16  Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus);)有没有正确执行;以为是.cmd配置除了问题,但是怎么改都没用,已经一个礼拜了,求大神指导啊,附件是。cmd配置

Zhengrong li:

回复 Eric Ma:

您好,把引导程序放在Flash A里面,但是通过设置.cmd和codestartbranch文件,把引导程序全部copy到RAM里面运行。这个应该是成功的,因为确实可以进行擦除(Erase E,F,G,H)。您说的防止还没烧完,数据又重新发送过来,的确有这种可能。只是在写第一版本的时候,我是把引导程序直接写入RAM(省略了写入Flash再copy到RAM这个步骤),这个时候38400是可行的。谢谢您的回答,我把上位机改改试试

赞(0)
未经允许不得转载:TI中文支持网 » DSP28062通过串口更新程序
分享到: 更多 (0)