BLE芯片DA145XX系列:BOOT启动时写入程序的实现

Dialog的DA14531芯片支持通过通讯接口在BOOT中写入程序,然后加载在RAM中运行。

注意该启动方式是将程序加载到RAM里的,所以设备复位或者掉电后,程序都需要重新刷写一次。一般情况下,DA14531的程序在32K以下,UART方式刷写一般不超过3秒完成启动,SPI方式则会快很多。

之所以这么做,主要是考虑芯片本身只有OTP的FLASH,升级通常通过外挂SPI的FALSH完成。但是考虑到成本问题,如果条件满足,完全可以将程序放在外挂的MCU里,每次上电启动时将程序写入,也可以起到相同作用,同时BLE芯片的程序受控性更好,降低程序无法恢复的风险。

下面是DA14531的BOOT启动描述和使用方法:

1、启动方式
DA14531的BOOT启动写入程序到RAM的方式包含以下几种:

由表可以看出,可以通过SPI、单线串口、双线串口、I2C方式将应用程序在芯片处于BOOT中时通讯并写入到RAM里,加载程序并运行。这样,就可以通过外挂一个芯片(比如一个MCU),通过启动时通讯来随时更新BLE芯片的程序了。

二、启动时间
上图还描述了BOOT启动时通讯的顺序,6种启动方式依次进行,它们的启动时间如下:

三、通讯示例

下面以双线串口来举例,如何在BOOT中刷入程序:
首先根据上表,p0_0需要接MCU的RX,P0_1接MCUTX,用于程序写入RAM。
同时,如果DA14531的电源不受控,则我们无法通过控制供电让它进入BOOT,则需要通过复位方式完成这一点
假设我们完成了断电重启或者复位,此时,根据上图所示,芯片会在上电后15.19ms串口发送一帧启动信号,MCU检测该启动信号,开始刷写流程


首先注意串口的属性配置:


通讯的流程:

(1)、复位15.19ms后,BLE芯片TX发送0x02,MCU接收到后,需给出回复
回复3个字节,分别是0x01,程序长度低字节、程序长度高字节(15.63ms之前MCU需要给出长度回复,否则会进入下一模式
(2)BLE收到回复后,返回ACK0x06 或 NACK0x15,标识刷写是否可以继续进行

(3)MCU开始依次传输升级BIN文件内容,直到传输完(1)步骤指定的长度为止
(4)BLE发送Code的CRC值(该CRC值为BLE芯片收到的code内容逐字节异或,MCU可以根据回复确认BLE芯片是否正确接收到了程序)
(5)MCU发送ACK0x06

(6)BEL收到后,完成刷写流程,自动跳转到0x07FC0000处,开始执行新程序

程序写入RAM的地址:



四、解决复位问题

按照上述流程描述,需要一个复位源来控制芯片重启,但是此时存在一个问题,我们已经把p0_0,也就是芯片默认的RST脚作为TX来用了,这样就需要在应用程序中重映射复位脚,可以直接调用Dialog的SDK来把RST脚映射到任何一个引脚上,如下:

/**
 ****************************************************************************************
 * @brief Enable the GPIO Power-On Reset (POR) source.
 * @param[in] port          GPIO port
 * @param[in] pin           GPIO pin
 * @param[in] polarity      GPIO por pin polarity. 0 = Active low, 1 = Active high.
 * @param[in] por_time      Time for the Power-On Reset to happen. The time is calculated
 *                          based on the following equation:
 *                          Time = por_time x 4096 x RC32 clock period
 ****************************************************************************************
 */
void GPIO_EnablePorPin(GPIO_PORT port, GPIO_PIN pin, GPIO_POR_PIN_POLARITY polarity, uint8_t por_time);    	

//设置示例:
//配置复位脚(将P07设置为复位脚,300mS以上拉高复位)
GPIO_EnablePorPin(GPIO_PORT_0, GPIO_PIN_7, 1, 0x02);

经过这样的配置,就可以解决复位问题了:此时,在BOOT中可以通过拉高P00脚来给芯片复位,在应用程序中则通过p07脚来给芯片复位。当然,还是建议通过电源控制程序进入BOOT会简单一些。

以上同样可以应用到剩下5种启动方式,都是相似的方法,参照手册即可。


 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值