ZHCADG6A December 2023 – April 2024 TMS320F2800157 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1 , TMS320F28P659DK-Q1
DCAN 闪存内核基于 DCAN ROM 加载程序源。为了使该代码能够擦除和编程闪存,必须合并闪存 API,这是通过链接闪存 API 来完成的。在接收到任何应用程序数据之前,F28P65x 和 F280015x(不包括 F28003x,此器件在稍后完成)DCAN 闪存内核会擦除器件的闪存以便为编程做好准备。F28P65x 和 F280015x DCAN 闪存内核工程允许用户指定在进行应用程序编程之前应擦除哪些闪存组和闪存扇区。自定义闪存组和扇区擦除中对此进行了更详细的论述。在闪存存储器中的相应位置进行擦除后,应用程序加载开始。缓冲区用于保存接收到的连续应用程序代码块。当缓冲区已满或检测到新的非连续数据块时,将对缓冲区中的代码进行编程。此过程一直持续到收到整个应用程序为止。
DCAN 模块在闪存内核中初始化后,该模块等待主机发送固件映像。闪存内核一次从主机接收 8 个字节,并将内容放入中间 RAM 缓冲区中。然后,将该缓冲区以 128 位或 512 位增量写入闪存。F28P65x 和 F280015x DCAN 闪存内核工程支持 512 位编程,而 F28003x 使用 128 位编程。如果需要,还有一个可用于 F28P65x 器件的 128 位编程工程。F280015x 闪存 API 支持 128 位编程,但闪存内核是用 512 位编程实现的。
在第一次写入扇区之前,F28003x(不包括 F28P65x 和 F280015x,因为闪存在此过程中的较早时间已被擦除)闪存内核会检查该扇区是否已被擦除,如果没有被擦除,F28003x 闪存内核会让闪存 API 执行擦除操作。此后,一个缓冲区将被写入闪存的内容填满,并从闪存 API 发送编程命令。一旦发生写入,闪存内核就会通过闪存 API 验证相应段是否已写入闪存的正确地址。一旦内核将所有内容复制到闪存,工程就会跳转到映像的入口地址。
存储在闪存中的固件映像的所有段都应根据一次性编程的位数对齐。如果一次编程 128 位(F28003x 和 F28P65x),这些段应与 128 位边界对齐。在固件镜像的链接器命令文件中,所有初始化段都需要映射到闪存扇区,并且在每次映射之后,需要添加 ALIGN(8) 指令以确保 128 位对齐。如果一次编程 512 位(F280015x 和 F28P65x),这些段应与 512 位边界对齐。在固件镜像的链接器命令文件中,所有初始化段都需要映射到闪存扇区,并且在每次映射之后,需要添加 ALIGN(32) 指令以确保 512 位对齐。
用于传输应用程序数据的协议与 DCAN ROM 加载程序协议略有不同。使用原始 DCAN ROM 加载程序协议,数据以每帧两个字节、100Kbps 的速度从主机传输到目标器件。由于数据每帧传输两个字节到 DCAN ROM 加载程序,这会增加下载内核或映像的总时间。将每帧数据长度代码 (DLC) 修改为 8 字节并将位速率增加至 1Mbps,就可以让 PC 侧应用程序一次通过主机发送多个字节,从而大大减少通信延迟。应用程序负载一节详细介绍了将比特率提高到 1Mbps 所需的更改。