项目笔记: GD32F3x0 与STM32Fxx ISP总结

1. 前言

近段时间在做的一个产品, 共用到3个MCU: GD32F3x0, GD32E2x0, STM32F3xx.
其中GD32F3x0,作为主MCU, 通过UART与另外两个MCU通信.
同时,主MCU可通过USB与PC连接。

项目笔记: GD32F3x0 与STM32Fxx ISP总结_第1张图片

产品需要实现三颗MCU的升级功能,根据电路设计,各个MCU升级实现方式如下。
(1) 通过USB接收上位机的升级程序。
(2) 通过IAP实现主MCU主程序升级。
(3) 通过ISP实现另外两个MCU (GD/ST) 的升级。
 

2. ISP知识总结

(1)关于同步

在同步发送0x7F后,在接收到0x18(NACK)也可以认为同步成功。

(2)关于读/写保护

Get Version命令获得的状态并不能正确反映目标MCU的保护状态。

可通过尝试读取指定地址(如0x8000000)的FLash内容来判断读保护状态,
如果能读成功则表明没有保护。

 可以读取Option Byte中相关字节来判定是否写保护了。
注意写保护字节一共才16位, 因此对于FLASH超过16页的MCU,
写保护字节一个bit对应是若干个Page的写保护状态。


当读保护使能后,ISP仅支持几条有限的查询指令,没法执行擦除和读写等操作。

(3)关于Erase 与  EraseExtend指令

两条指令是独占的, 一个器件只可能支持其中一条指令,可通过Get命令可判断芯片支持那一条指令。


(4)其它

可通过Read Memory命令读取指定地址内容来获取目的MCU的DID, UUID以及Flash density(Flash容量大小)。

 

3.  总结

现在这种升级方式快捷可靠,已经应用到实际产品。

缺点是从MCU采用ISP方式,加密性并不强,仅适用于从MCU程序加密要求不高的情况。

你可能感兴趣的:(STM32)