DSP在线升级程序步骤

本文详细介绍了C2000 DSP中28335/28069型号的在线升级过程,包括升级程序的主要思路、步骤、数据接收、校验、烧写和跳转。通过CAN/串口通信接收数据,使用CRC16进行校验,利用Flash API进行烧写,并通过汇编指令实现程序的跳转。此外,还讨论了主程序如何处理升级指令以及注意事项,如升级程序与主程序的空间分配和升级后的跳转问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标板:C2000的28335/28069

一、主要思路:
1、准备升级程序(相当于一个bootloader),作为上电首先运行的程序。进入升级程序,首先判断需不需要升级,需要升级,进入升级状态,通信完成新的主程序的接收,存入,升级成功后,进入主程序运行。

2、在主程序运行时,收到升级指令,标记升级标志,重启进入升级程序进去升级。

3、板子上电后,会调到flash启动的起始地址0x33FFF6(DSP28335),这个地址存放着程序的codestart的其实地址。所以,修改了0x33FFF6的存放的值,那么就能决定执行那一段程序。还可以通过汇编跳转指令直接跳转到程序codestart执行。

二、升级程序
1、具备能力:具备通信能力和Flash读写能力

2、准备:Flash API移植、上位机的升级配套程序;存储升级标志位的空间(外部EEPROM,不会随便擦除的内部Flash)

3、流程:接收->校验->烧写->跳转

三、升级步骤
1、数据 接收 :通过CAN/串口等方式接收数据。由于28335内存较小,不适合缓存大量的数据,这里是接收一部分数据,校验完成后烧写进Flash,再去接收一部分数据

2、数据解析:接收到的数据是hex格式的数据,所以需要解析才能放入对应的flash地址。但由于28335能力限制,这里采用先在上位机解析完成,采用先告知地址,然后发送数据的方式完成数据通信和传输。

3、校验:这里采用crc校验。
/******************************************************
*Name    :  crc16
*Function:  crc校验16位
*Params  :  data(UInt8 *):待操作的数组   len:数据长度
*Return  :  UInt16:返回CRC值 CRC校验码为2个字节高位在前
*******************************************************/
UInt16 crc16(Uint8 *data, UInt16 len)
{
    UInt16 CRC = 0xFFFF;
    UInt8 j, TMP = 0;
    UInt8 i;
    for (i = 0; i < len; i++)
    {
        CRC ^= data[i];
        for (j = 0; j < 8; j++)
        {
            TMP = CRC & 0x0001;
            CRC = CRC >> 1;
            if(TMP)
                CRC = CRC ^ 0xA001;
        }
    }
    return CRC;
}

4、数据烧写flash:运用flash API提供的接收完成数据的烧写。这里要注意flash API必须运行在RAM中。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值