您可以通过串行接口升级XBee Zigbee模块的固件。它通过触发进入XBee启动器,用XMODEM机制传输固件来实现该操作。使用XCTU通过本机电脑串口来升级XBee模块的固件也是利用这种方法。

XBee模块使用DIN,DTR,RTS三根引脚配合来触发进入启动器,以准备升级固件:

  1. 将DTR置为低电平,RTS置为高电平
  2. 发送一个串口的Break信号(即拉低DIN),然后重上电或reset模块。
  3. 结速串口的Break信号(恢复DIN为正常的高电平),并以115200波特率发送一个回车符给XBee。
  4. 如果模块成功进入bootloader状态, bootloader菜单会以115200的波特率送出DOUT。
  5. 你可以用115200波特率发启动器命令给bootloader,以完成像固件升级之类的对应操作

注意,bootloader下操作,请不要使用流控功能,因为我们上面用到了相关的硬件流控线。

如果硬件上没有接流控线,也是可以通过AT命令进行固件升级的,但是如果模块固件已经损坏,没有DTR/RTS是无法进行XBee recovery操作的。因此要修复已经完全变砖的模块,是需要DTR/RTS。 (但一些情况下模块固件有问题,但刚好在bootloader的状态,仍有机会用两线机制恢复)。

注意当模块在bootloader模式时,是用115200波特率通讯的,所以如果你的XBee用的是9600波特率,就要按下面操作过程,进行波特率切换了。

我们假定你的XBee模块是配置成9600/8/n/1的,先打开XCTU上的Tools>Serial Console, 在这个工具下可以对串口波特率进行手工配置。先用9600/8/n/1的波特率,发“+++”进入命令模式,输入“AT%P”命令,会出来一串“乱码”,其实这是因为bootloader用115200波特率,所以本来是bootloader的菜单显示为乱码了,为了看清这个菜单,需要在Serial Console中断开串口,调整波特率为115200,再打开串口,键入一个回车符,bootloader的菜单就会重新出现,如下所示:

也许你注意到,在bootloader下,键入回车符就会再把bootloader菜单打印一次,这个bootloader菜单很简单,键入1传递固件,键入2应用固件并退出bootloader,键入3打印固件的信息。

用这个方法可以用MCU进行本地升级固件。