雨夜很凉快 发表于 2022-8-10 17:21

【雅特力AT32WB415系列蓝牙BLE 5.0 MCU】+IAP(Bootloader)

<p align="center">【雅特力AT32WB415系列蓝牙BLE 5.0 MCU】+IAP(Bootloader)</p>

<p align="justify" style="">首先,对雅特力表示感谢,既提供了测评的机会,又提供了完善的资源供大家学习。</p>

<p align="justify" style="">本节体验Bootloader,不的不说其Bootloader相关文档给的是真的全面,包含USART Bootloader支持命令(命令描述的非常细节),Bootloader USB DFU 请求流程(命令数据描述很清楚)以及各芯片型号的外设配置表。</p>

<ul>
        <li align="justify" style="">芯片及功能介绍</li>
</ul>

<p align="justify" style="">&nbsp;</p>

<p align="justify" style=""> &nbsp;</p>

<ol>
        <li style="list-style-type:none">
        <ol>
                <li align="justify" style="">AT32WB415系列芯片基于RAM32基于ARM&reg; 32位的Cortex&reg; -M4的无线蓝牙微控制器.产品对标STM32WB系列芯片,可以说性价比非常高。</li>
                <li style="">Bootloader内存空间:芯片内256 K字节的闪存存储器,18 K字节的启动程序代码区作启动加载程序 (Bootloader)用,32k字节的SRAM缓存。</li>
        </ol>
        </li>
</ol>

<p style=""> &nbsp;</p>

<ul>
        <li style="list-style-type:none">
        <ol start="3">
                <li style="">如图所示:Bootloader支持USART2和OTGFS1升级方式。</li>
        </ol>
        </li>
        <li style="">API文件研究</li>
</ul>

<p style=""> &nbsp;</p>

<p style="">2.1、IAP 功能的实现,一般将程序分为两个部分,即:Bootloader 和 APP。Bootloader 程序用于上电时判断程 序是进入 IAP 升级流程还是进入 APP 应用程序执行过程。</p>

<p style="">2.2、官方例程和api文档一致,如图所示,有USART和USB两种接口的IAP升级例程,配有Bootloader和APP例程。</p>

<p style="">2.3、雅特力AT32还配有API代码说明文档,文档内注明函数的使用方法,还有代码程序例程,简直不要太好用。</p>

<p style="">三、Bootloader程序</p>

<p style=""> &nbsp;</p>

<p style="">3.1、BOOT程序</p>

<p style=""> &nbsp;</p>

<p style="">3.2、APP程序</p>

<p style=""> &nbsp;</p>

<p style="">3.3、上位机传程序软件</p>

<p style="">四、Bootloader软件开发逻辑</p>

<p style="">4.1、UARTx 编程启动模式&nbsp;</p>

<p style="">当使用UART编程模式时,Bootloader启动之后会检测UARTx Rx引脚,等待接收0x7F数据帧:一个 起始位,0x7F数据位,奇偶校验位和一个停止位。通过Systick定时器测量该数据帧,计算出UARTx</p>

<p style="">使用的波特率,再通过UARTx响应主机0x79,表示连接成功,此时微控制器端等待接收主机命令。 如下图流程</p>

<p style=""> &nbsp;</p>

<p style="">4.2、UARTx 波特率&nbsp;</p>

<p style="">波特率设定&nbsp;AT32 Bootloader 支持自动侦测波特率,误差率低于 2.5%。最小波特率支持 1200,最大波特率支持</p>

<p style="">256000。&nbsp;</p>

<p style="">误差率&nbsp;= | | &times; 100%。误差率小于2.5%。&nbsp;Bootloader侦测波特率方法:&nbsp;</p>

<p style="">微控制启动之后,主机端发送0x7F数据到设备端,包括1个起始位,值为0x7F的8位数据,偶校验位 和1个停止位。&nbsp;</p>

<p style="">当设备侦测到主机发送的数据后,会将设备端对应的UARTx设定好波特率,然后响应0x79,当主机 接收到0x79,则表示连接成功,可以继续发送命令。&nbsp;ACK = 0x79 NACK = 0x1F</p>

<p style="">4.3、Bootloader 命令详解请参考Bootloader文档资料,下面是主要的数据传输学习概况。</p>

<p style="">Write Memory</p>

<p style="">Write Memory 命令用于将数据写入主存储器,SRAM,用户系统数据区等,在写入主存储器之前, 需要先擦除对应地址的数据,另外写入的地址必须是有效范围内的地址,需要注意各个型号的有效地 址范围不同。&nbsp;</p>

<p style="">用户系统数据区由于不同型号范围不同,会有不同处理:&nbsp;</p>

<p style="">l&nbsp;用户系统数据区小于 256 字节&nbsp;</p>

<p style="">主机只发一次写命令将所有用户系统数据写入,设备端在收到命令之后会自动擦除用户系统数据 区,然后将数据写入,最后自动执行系统复位。&nbsp;</p>

<p style="">l&nbsp;用户系统系统数据区大于 256 字节&nbsp;</p>

<p style="">主机需要发送多次写命令,才能将用户系统数据写入&nbsp;</p>

<p style="">设备端在收到命令之后,如果地址为用户系统数据区的起始地址,则执行擦除,然后写入数据。&nbsp;</p>

<p style="">如果收到的地址不是用户系统数据区的起始地址,则不执行擦除,直接将数据写入对应地址。&nbsp;</p>

<p style="">当数据写完之后,将自动执行系统复位。&nbsp;</p>

<p style="">注意:AT32F435xx/AT32F437xx 在写完用户系统数据区之后不会自动执行系统复位,需要主机 端发送复位命令(Reset)。&nbsp;</p>

<p style="">当设备收到此命令后,如果访问保护没有开启,则响应主机 ACK,接着会等待 4 字节的写入地址及 其 Checksum,当收到的地址和 Checksum 都有效时,响应主机 ACK,再等待 1 字节的写入长度及 其 Checksum,长度的值为实际要写入的值长度减 1(如写 10 字节数据,此值为 9),当 Checksum 正 确时,将开始写入对应地址的数据,写完之后响应主机 ACK。&nbsp;</p>

<p style="">此命令在访问保护开启时不能使用。&nbsp;</p>

<p align="center" style="">Write Memory <b>主机端流程图</b></p>

<p align="center" style=""> &nbsp;</p>

<p align="center" style="">Write Memory <b>设备端流程图</b></p>

<p align="center" style=""> &nbsp;</p>

Jacktang 发表于 2022-8-11 07:43

<p>测评很详细,参考意义很大</p>

秦天qintian0303 发表于 2022-8-11 08:45

<p>Bootloader 程序编译后大概多大?</p>

雨夜很凉快 发表于 2022-8-11 12:32

Jacktang 发表于 2022-8-11 07:43
测评很详细,参考意义很大

<p>谢谢</p>
页: [1]
查看完整版本: 【雅特力AT32WB415系列蓝牙BLE 5.0 MCU】+IAP(Bootloader)