STM32 BootLoader 刷新项目 (四) 通信协议

STM32 BootLoader 刷新项目 (四) 通信协议


前面几章节,我们已经介绍了BootLoader的整体程序框架,方案设计,以及STM32CubdeMX的配置操作。下面切入整个BootLoader项目的核心内容,通信协议。

我理解的通信协议,其实就是双方提前约定好的暗号。比如说到了提前约定好的地方,一个人逢人便说:“天王盖地虎”。只有懂他暗号对接的人才知道,这是他要找的人,另外一个人就回:”小鸡炖蘑菇“。至此,这两个便通过暗号,传达到了他们配对的信息。

所以,在我们进入到BootLoader模式的时候,必须得发送Host主机端和从机定义好的协议进行通讯,二者才能执行正确的行为。

1. 通信流程

下图便是整个通信的流程,显示主机通过UART发送命令指令,从机收到主机发送的命令,如果是正确的命令,则回复ACK,错误的话则回复NACK,然后在回复之后从机会回复多少字节数据。然后再回复结果。

image-20240714102347637

2. 支持指令

下面是整个Customer BootLoader支持的指令,其中比较重要的是0x55(BL跳转固定地址),0x56(指定擦除扇区),0x57(在不同内存写数据)。后续将详细介绍整个Customer BootLoader的方案实现和代码实现。

主机发送 命令码 BootLoader回复 备注
BL_GET_VER 0x51 BootLoader版本号(1 byte) 从MCU中读BootLoader的版本号
BL_GET_HELP 0x52 所有支持的命令码(10 bytes) 列出BootLoader支持的所有命令
BL_GET_CID 0x53 Chip identification number(2 bytes) 读芯片的识别号
BL_GET_RDP_STATUS 0x54 返回芯片读保护等级(1 byte) 读行骗Flash的读保护等级
BL_GO_TO_ADDR 0x55 返回成功或错误(1 byte) BL跳转固定地址
BL_FLASH_ERASE 0x56 返回成功或错误(1 byte) 指定擦除扇区
BL_MEM_WRITE 0x57 返回成功或错误(1 byte) 在不同内存写数据
BL_EN_R_W_PROTECT 0x58 返回成功或错误(1 byte) 使能读/写保护
BL_MEM_READ 0x59 主机请求的内存内容长度 TO DO
BL_READ_SECTOR_STATUS 0x5A 所有Sector状态 读所有扇区的保护状态
BL_OTP_READ 0x5B OTP contents TO DO
BL_DIS_R_W_PROTECT 0x5C 返回成功或错误(1 byte) 该命令用于禁用用户Flash的不同扇区的读写保护功能。该命令将保护状态恢复为默认状态。

下图是上位机的操作界面,是由Python脚本进行编写的,执行脚本后,先输入和开发板对应的串口号,进行连接。然后可以看到支持的指令,通过输入相应的数字,即可向从机发送相应的命令。

image-20240713104433991

3. 通信流程

下面我们来介绍一下,BootLoader通信协议的命令组成,首先第一个字节为接下来要发送数据的长度,第二个字节是命令,第3-6字节为四个字节的CRC校验码。

当从机收到数据后,先收第一字节数据,得到接下来发送数据的长度,然后更具接收数据的长度,在确定接下来应该接收多少字节的数据。将收到的数据解析,第一个字节(除掉一开始收到的长度位)为命令,通过swich case指令,来判断应该执行哪种命令的操作。代码如下图所示:

    while (1)
    {
   
   
    	memset(bl_rx_buffer, 0, 200);
    	//here we will read and decode the commands coming from host
    	//first read only one byte from the host , which is the "length" field of the command packet
    	HAL_UART_Receive(C_UART,bl_rx_buffer,1,HAL_MAX_DELAY
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾格北峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值