芯片在应用前,是一颗裸片,内部没有任何驱动或应用程序。芯片在贴上PCB板子后,会实现各种功能,这是时候会开发对应的驱动或者应用程序,在芯片上面运行的程序,一般称之为固件(Firmware)。
把固件烧录进芯片,一般通过J-link、DAP、UART、Bluetooth等途径,我们公司芯片支持J-link、UART两个途径升级芯片固件,本文档主要说明通过UART升级芯片固件。
通过UART(也叫ISP)升级芯片固件,分以下两种模式:
A. 双线模式,即TX+RX模式,需要6根接线:TX、RX、VDD、GND、RESET、BOOT。
B. 单线模式,即TX&RX&BOOT模式,即TX、RX、BOOT共用一根线,需要4根接线:TX&RX&BOOT、VDD、GND、RESET。
升级方法:芯片上电,拉低RESET引脚,然后拉高BOOT引脚,等5-10mS,再拉高RESET引脚,保持BOOT引脚为高电平并持续5mS以上,芯片即进入ISP升级模式。当芯片进入ISP模式后,既可按照ISP协议(一般为自定义协议,非国标)进行升级。
ISP底层:为芯片出厂前已固化的ISP code,不占用MCU 的FLASH空间,专门用于通过ISP接口给MCU烧录(或升级)应用&驱动固件。
上位机和下位机发送和接收的命令采用字符形式,每个命令后面都有“\r\n”;收发数据的格式采用 UUcode 编解码格式;
a) “E0”:表示接收到非法命令或者下位机解析命令失败;
b) “E1”:表示擦除 FLASH 操作失败;
c) “E2”:表示写入 FLASH 操作失败;
d) “E3”:表示写入 SRAM 操作失败;
e) “E4”:表示待写入 FLASH 的数据不是 1 页或者写入 SRAM 的数据超过 1 页。
a) 波特率同步命令:M->"sync\r\n",S->"sync\r\n";
b) 设置波特率命令:M-> "baudrate 000000\r\n",S-> "OK\r\n";
c) 获取版本号命令:M-> "version\r\n",S-> "SWM24V20\r\n";
d) 擦除 FLASH 命令:M-> "erase 0000 0000\r\n",S->"OK\r\n";
e) 写入 FLASH 命令:M->"copy 00000\r\n",S->"OK\r\n";
f) 写 SRAM 命令 1:M->"write\r\n",S->"OK\r\n";
g) 写 SRAM 命令 2:M->"W UUencode Checksum\r\n",S->"OK\r\n";
a) 上位机开发的时候可以预置各个芯片 Flash 的 sector 以及 page 大小,也可以下载的时候选择,并以此计算来下发读写命令。
b) 上位机操作 flash 单位为 sector 和 page,下载不满一个 page 时候填充 FF。
c) 下位机的写入 FLASH 命令是固定 1 个页大小的数据。
d) 下载文件时,分小包编码传输给下位机,下位机接收到后把多个小包文件解码组合 成一个大包(一个 page),等待上位机传输 copy 命令,再写入 flash。具体编码格 式见文件末尾。
本节主要说明MCU端(被动应答)ISP升级流程:
A.上位机发送“version\r\n”。
B.下位机回复芯片版本号。
A.以目的波特率为9600为例。
B.上位机先以4800波特率发送"sync\r\n"命令,等待下位机以4800波特率回复"sync\r\n"。
C.上位机以4800波特率发送"baudrate 000000\r\n",000000格式如下:
a) SWM120、SWM160、SWM181、SWM220、SWM260芯片,000000 = 24M/16/Baud。
b) SWM190芯片,000000 = 24M / Baud;
c) SWM320芯片,000000 = 20M / 16 / Baud;
d)例如SWM181 需要设置9600波特率,则000000 = 24M / 16 / 9600 = 000156,则此步骤需要发送"baudrate 000156\r\n"。
D.下位机收到后回复"OK\r\n",然后切换波特率到9600。
E.上位机接收到"OK\r\n"后,延时5~10ms,改变波特率到9600,然后发送"sync\r\n"。
F.下位机接收正常后返回"sync\r\n"。
G.上位机接收到"sync\r\n"后提示握手成功。
A.上位机先发送"erase 0000 0000\r\n"命令(其中0000 0000表示发送字符形式的擦除起始扇区和要擦除的扇区个数,例如要擦除下位机第8扇区开始的4个扇区则发送"erase 0008 0004\r\n")。
B.等待下位机回复"OK\r\n",表明擦除FLASH成功;下位机回复"E1\r\n",表示擦除FLASH失败。
A.上位机先发送"write\r\n"命令,等待下位机回复"OK\r\n"。
B.上位机发送"W UUencode Checksum\r\n",等待下位机回复"OK\r\n",表明一帧数据写入SRAM成功。
a) UUencode 表示编码后的数据。
b) Checksum表示编码前数据的校验和。
c) 具体格式参见文章末尾编码说明。
A.上位机发送"copy 00000\r\n"命令(其中00000表示字符形式的起始页,例如要写入第8页起始的1页数据则发送"copy 00008\r\n")。
B.下位机回复"OK\r\n",表明写入FLASH成功。
1. 一芯片的SWD引脚一般跟GPIO引脚复用,如果需要扩展GPIO,就需要禁用SWD功能,这种情况下升级就可以通过ISP接口。
2. 单线ISP模式,只需要一个ISP引脚、一个RESET引脚、一个GND,为精简接口模式。
如果产品已装机,用ISP升级,也需要拆机进行。