Part Number:TMS320F28335Other Parts Discussed in Thread:C2000WARE
你好:
电机控制器产品使用TI的28335作为控制芯片时遇到点问题,具体表现为:同一个hex文件,使用仿真器通过C2Prog进行烧写时程序表现正常,但使用前工程师留下的上位机软件进行Can在线烧写后,控制器开管即产生一个初始的电流指令导致电机飞车,由于对28335芯片工作原理不熟,且缺乏Flash烧写的相关开发经验,查问题时感到困难重重,不知该从何下手。有几个问题想请教一下:
1、在bootloader代码中看到类似Flash_Erase、Flash_Program之类的相关函数,但找到不相应的函数原型或说明,不知其参数、返回值的具体含义是什么,请问哪里可以找到相关的函数使用说明文件,是否有中文版本?
2、在bootloader代码中看到内嵌汇编指令asm(" LB 0x327F78"),这句指令的具体功能是什么呢?是否有相关的汇编指令资料可供查询?
3、目前这个CAN烧写上位机已经在批量产品中应用许久,之前从未出现过问题,这次是一个新项目对can通讯协议作了较大的更改后发现,CAN应用程序的头文件里,某个结构体定义的成员数超过一定数量后,就会出现使用Flash烧写后电机开管飞车,而使用c2prog烧写则正常的现象,不知道经验丰富的TI工程师对此情况有没有什么头绪,哪个环节可能导致?
4、想深入学习28335芯片的工作原理以便完整明白can在线烧写程序是如何实现的,是否有相关的资料可供下载?
非常感谢!
Green Deng:
1、应该是调用的flashAPI函数,你可以看一下C2000WARE中,flashAPI函数的对应文档:C:/ti/c2000/C2000Ware_4_00_00_00/libraries/flash_api/f2833x/28335/docs/Flash2833x_API_Quickstart.pdf
2、光看这条指令的话就是在asm语句的位置插入LB 0x327F78这条指令。
3、这个得看一下造成飞车的原因是什么,也就是对应的PWM波形是怎么个情况?
4、我觉得需要结合三个方面:一是芯片本身的boot过程,二是CAN通信本身,三是flashAPI函数。前两点可以在芯片TRM中学习,第三点可以参考1中的文档。
,
Yiyang Guo:
您好,上次提问也是您在回答^_^:
关于1:我去看看,谢谢;
关于2:如果没理解错的话 0x327F78应该是一个地址吧?想知道LB指令是对该地址进行什么操作呢?LB指令的作用我在网上没能查询到,是28335专用的指令集吗?
关于3:是因为执行开管(即PWM开始发波,IGBT开始工作)后,电流指令变量有了一个初始值,正常情况下开管的指令应该为零才对,通过仿真器烧写程序开管是正常的,通过CAN总线对FLASH进行刷写后,就会出现这个开管后指令异常,所以怀疑问题出现在烧写过程中或烧写后。我看bootloader的代码,烧写结束后是一个for的死循环,里面就是问题2中提及的asm(" LB 0x327F78"),但我在程序里无法搜索到这个地址相关的内容,正常情况下bootloader未进行烧写或烧写完成后,程序应该如何跳转才能跑到Flash里的应用程序去呢?
关于4:好的谢谢;
感谢回复!
,
Green Deng:
2、这里的LB应该是一个汇编语言的指令,但是抱歉实在没研究过汇编语言,不太了解这个语句的意思。
3、个人猜测会不会是烧写过程中,程序对PWM口的接管失效,导致PWM口处于无控制状态。不知道PWM口是否有外加的弱上/下拉?
关于上电跳转,看一下这个帖子的说明:e2echina.ti.com/…/455380
,
jh chen:
c2prog烧写则正常,CAN烧写则有问题。可能原因为,你们修改程序之后,代码大小发生变化。而CAN烧写上位机的解析可能存在范围问题。有一部分代码或者说这样是初始化值没有烧录到flash。导致程序已运行指令异常。建议检查CAN烧写上位机里面对文件的解析过程。
0x327F78 是flash地址,你可以再用仿真器烧写完后,看一下这里的内容。