在DA14580的开发中,我们可以通过代码设置一个固定的蓝牙地址来测试,如下图,我们将地址设置为1234567890ab:
烧录后,我们可以通过抓包工具看到实际的地址:
那么问题来了,如果我要生产100套呢?难道每一个都去重新编译一个hex文件么?
当然,答案是否定的,我们有很多种解决方法,可以将我们的蓝牙地址存在FLASH的某个位置(EEPROM也一样,下文不再重复),然后我们增加代码去读FLASH中的蓝牙地址,每生产一个,就改动FLASH中的地址字节。当然这样做的弊端就是增加了我们的代码工作量,所以,我们不推荐这种方法。
这里给大家介绍一种简单的方法,就是可以将地址放在OTP的header中,只烧录header不烧录程序,这样不影响我们将应用程序放到FLASH中,也不影响OTA等功能。
首先我们来看看这样做的官方依据:
打开以上文件,我们可以清楚地看到关于蓝牙地址的说明—如果OTP header中有蓝牙地址,则定义无效。所以,我们的想法有理论依据。
接着,连接好我们的硬件,打开SmartSnippets,按照下图选择OTP Header烧录界面:
然后点击Connect:
根据提示操作,显示成功连接后,我们找到以下位置,红色框中的选项选择No,这表明我们的应用程序不在OTP中,程序还是会从外部FLASH中启动:
接着找到晶振设置选项,根据您的硬件选择,我们这里有外部32k晶振,所以选择外部:
然后设置DMA大小为32k(00001fff):
找到以下位置,设置我们要的蓝牙地址:
设置地址,我们可以将鼠标移到右侧,点击以下图标:
会跳出一个对话框,直接输入我们要的地址,地址前6字节是有效的:
填好以后点击Burn:
提示烧录成功后,我们reset芯片,再用抓包工具看,地址已经改为我们设置的新地址:
这里说明一下地址的位置,我们设置的值是:0xCD123456007890AB,去掉最后2字节为0xCD1234560078,最后我们通过广播得到的地址是0x7800563412CD,所以,如果我们要设置0x1234567890AB为蓝牙地址,则填写的值应该为:0xAB9078563412****,这个可以自己去体会。
当然,以上过程只是工程师测试时可以使用,真正量产时可以使用量产工具,做到蓝牙地址自动递增,以提高生产效率。关于量产工具的使用,这边不再做过多的说明。
这里需要特别说明的一点是,OTP为一次性烧写,这次烧写完毕后下次就不能改啦,所以设置的时候千万要小心。