DSP

【28系列DSP小结-3】通过SCI更新Flash程序

2019-07-13 09:43发布

预备:
DSP程序运行起点 _c_int00,该函数由静态链接库定义,负责DSP的部分初始化,可认为是整个程序的起点。
截自数据手册
Flash API库函数
  • Erase Function
    函数原型 (Defined in Flash280x_API_Library.h)
    Description: The Erase function will erase the specified flash
    sectors. The remaining sectors will not be changed.
    extern Uint16 Flash2806_Erase(
    Uint16 SectorMask, // Sector mask
    FLASH_ST *FEraseStat // Pointer to the status structure
    };
这里写图片描述
  • Program Function
    函数原型(Defined in Flash280x_API_Library.h)
    extern Uint16 Flash2806_Program(
    Uint16 *FlashAddr, // 指向写入的flash或otp地址
    Uint16 *BufAddr, // 指向写入内容地址
    Uint32 Length, // 写入长度()
    FLASH_ST *FProgStatus // 指针表明写入状态
    );
  • Verify Function
    函数原型(Defined in Flash280x_API_Library.h)
    比较RAM和FLASH或OTP中是否完全相同
    TMS320F2806:
    extern Uint16 Flash2806_Verify(
    Uint16 *FlashAddr, // Pointer to the first flash/OTP loc
    Uint16 *BufAddr, // Pointer to the buffer
    Uint32 Length, // Number of 16-bit values to verify
    FLASH_ST *FVerifyStat // Pointers to the status structure
    );
out转hex
利用TI公司提供的hex程序可以将out文件转化为可由intel识别的hex文件。
编写cmd文件
作用:以何种方式产生hex DISP_2806_150415.out /*输入文件*/ -o DISP_2806_150415.hex /*输出文件名*/ -m /*输出为text格式*/ -map DISP_2806_150415.map -memwidth 16/*输入位长度*/ -romwidth 16/*输出位长度*/ ROMS/*指定FLASH空间*/ { FLASH_ABCD origin = 0x3F0000, length = 0x008000 } 编写bat
作用:以何种方式调用hex2000.exe
hex2000 Build.cmd
程序流程(简版)
初始化SCI
接收来自上位机的数据帧,帧中包括该指令的存储位置,指令值和校验位
调用FLASH API将得到的内容存入对应地址
校验存储是否正确
程序回到起点_c_int00
注意
回到程序起点之前,要将一些系统标志位复位,因为这些标志位存在RAM中并没有掉电丢失。对合适的场合可以直接断电重启。