TI DSP28377D芯片上基于UDS的BOOT调试记录

        本次开发所用平台为TI的DSP芯片,型号TMS320F28377D。在开发过程中难点是芯片的驱动调试,下面记录在开发中的调试记录及问题点和解决方式。

        首先本芯片在官方能够得到例程,但是未找到例程的完善使用方式,所以只能参考而不能编译及运行。

        由于是接到项目后首次使用TI芯片及CCS编译环境,所以编译环境的熟悉比较重要,首先建立一个空白的项目工程,需要配置目标芯片及仿真器,此步骤较简单可参考网上的步骤;然后需要在工程内放入开发中需要的外设及软件运行环境,包括headers,driverlib,common等,可从官方例程获取。

        添加  2837xD_FLASH_lnk_cpu1.cmd文件,此文件为DSP的内存划分文件,根据实际需求对内存进行划分;也是仿真时程序的下载位置文件,该文件为在FLASH上下载及仿真。

        添加 F2837xD_Headers_nonBIOS_cpu1.cmd,该文件为DSP的启动配置文件,没有此文件芯片无法正常运行(本人在调试时现象为时钟倍频出错,初始化时在InitSysPll阻塞无法继续运行)。

        配置完成后编译能够通过则能够保证程序挣够正常运行(以上只是简单说明,详细的工程建立请参考其他资源,本文不会赘述)。

        开始调试

1.CAN调试中问题及解决

        28377D芯片有两个CAN外设,首先确认使用了哪一路CAN,以及CAN的IO引脚,对GPIO和CAN进行基本配置,由于项目中使用轮询方式,所以并未配置中断。

        CAN基础配置完成后需要对CAN邮箱配置,在本次开发中只用了两个邮箱(一收一发)

接收邮箱需要配置ui32MsgID及ui32MsgIDMask,ui32MsgID为想要接收的CANid,ui32MsgIDMask为ui32MsgID起作用的位标志;这两个配置组成了CAN的滤波器,若不需要进行滤波则将ui32MsgIDMask设置为0,同时ui32Flags需要配置MSG_OBJ_USE_ID_FILTER才能使ui32MsgIDMask起作用。

        2.timer,wdg

        对照例程配置好时间即可,注意TIMER溢出标志位为1使需要再写入1才能清除

        3.FLASH

        FLASH驱动的运行基于官方的lib文件,通过调用官方API函数实现擦写功能,以官方例程方式运行基本不会产生问题,注意在写FLASH时写入方式,如果使用only data方式写入会存在ECC错误中断导致死机。

        在调试时发现FLASH操作在调试模式(仿真)下运行和离线运行差异较大,其中一个现象为调试模式下flash ecc可能自动关闭,脱机运行就会产生ecc中断死机;而且flash ilb内容在调试模式下通过CAN下载进RAM可以运行,而离线模式不能正常运行。

        同时Fapi_UserDefinedFunctions.c内函数存在LIB的回调,如果在内存中位置有变动可能存在跑飞风险

4.BOOT跳转到APP

         由于本项目为一个产品的BOOT,所以最终需要实现绝对地址跳转,跳转前一定要关闭flash ecc。

5.其他

        看门狗复位会清空RAM。

        单地址双字节(16bit)

        FLASH仿真只能两个断点,多了不能使用,新断点需要复位后产生作用。

        建议开发前将优化关闭。

        FLASH  lib文件必须固化到FLASH内,可通过其他方式下载RAM中,只下载到RAM不起作用。


版权声明:本文为m0_46482494原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。