【WCH蓝牙系列芯片】-脱机烧录器烧录蓝牙芯片输出的日志说明
-------------------------------------------------------------------------------------------------------------------------------------
前期的离线烧录CH585芯片过程,可以参考这个链接:

将脱机烧录器的串口烧录脚,接到CH585开发板的 PA15、PA14、VCC和GND脚,然后将BOOT脚PB22接到脱机烧录器的GND上,这样烧录后会拉低进入烧录。然后再将串口日志输出脚TX接到调试工具的RX,并接个GNN进行共地处理。
通过串口调试工具来观察,整个烧录过程中,日志输出情况。

可以看到,日志输出的Boot-UART,表明是采用的串口烧录的方式,
chip UID:94 04 84 88 19 70 31 fd ,这个chip UID输出的前六个字节芯片的内部的唯一MAC地址,最后两位是校验位。

通过BLE调试助手可以观察到,在主机端传入的mac地址要注意大小端问题,所以这个蓝牙从机的MAC地址是 70 19 88 84 04 94。所以在串口日志输出的chip UID:94 04 84 88 19 70 31 fd中,前六个字节是以小端存储的,需要将第六个字节作为蓝牙MAC地址的第一个字节,依此排列,第一个字节也就是蓝牙MAC地址的最后一个字节,即第六个字节。
其中的校验关系是:(0x0494 + 0x8884 + 0x7019 )& 0xFFFF = 0xFD31
至于后两位的校验位如何得到的,可以分析一下

在这个程序中, 我们可以观察这个通过FLASH_EEPROM_CMD函数中,读取到MAC地址信息, 然后再计算校验和,从 Buffer 中取出前6个字节(即MAC地址的6个字节),分别将每两个字节组合成一个16位的整数。将这三个16位整数相加,得到一个累加和 temp,然后存储校验和,将累加和 temp 的低8位存储在 Buffer[6] 中。将累加和 temp 的高8位存储在 Buffer[7] 中。

通过串口打印来可以观察到,Buffer 中取出前6个字节是94 04 84 88 19 70 ,
-
04 << 8表示将04左移 8 位。 -
04的二进制表示为00000100。 -
左移 8 位后,结果为
00000100 00000000,即0400
-
94 | 0400表示将94和0400进行按位或操作。 -
94的二进制表示为10010100。 -
0400的二进制表示为00000100 00000000。 -
按位或操作的结果为
00000100 10010100,即0494
然后讲这个六个字节两两组合成16位整数,然后全部累加起来,得到计算的校验和数据。
也就是0494+8884+7019 = FD31(十六进制加法)
然后将31字节低8位存储在 Buffer[6]中,FD字节高8位存储在 Buffer[7]中。这样就得到两个字节的校验值,也就是脱机烧录器输出的日志chip UID的最后两位校验值。
浙公网安备 33010602011771号