嗨,伙计们,
最近,我们在使用子板DA14585-01ATDB-p171800182时遇到了一个奇怪的问题,因为它在尝试从sdk6.0.4.326(据我们所知,目前是最新的)运行任何BLE应用程序时由于硬故障而崩溃。但是,该板运行的应用程序与旧版sdk6.0.2.243相同,没有问题。亚博国际官网平台网址
然后,我们设计并制作了几个原型,我们自己的董事会的基础上相同的DA14585在同一个包(Digikey零件号1564-1047-1-ND)。通过JTAG连接到DA14580DEVKIT后,成功识别为DA14585。但是,我们的开发板无法运行来自旧版SDK 6.0.2.243的BLE应用程序,但它们不会立即与来自最新SDK 6.0.4.326的应用程序崩溃(启用睡眠的BLE应用程序在几秒钟后崩溃,但这是另一个讨论的主题)。亚博国际官网平台网址
在搜索崩溃原因时,我们发现硬故障是由arch\u rom\u init()引起的,原因是以下代码行:
//强制HCI根表设置
memcpy(hci\u cmd\u desc\u root\u tab,rom\u hci\u cmd\u desc\u root\u tab,48);
…这给人的印象是,同一个封装中的两个相同类型的IC具有不同的ROM版本,而BLE堆栈实际上位于这些ROM版本中。此外,每个ROM版本都需要一个合适的SDK,并且没有任何实际的检查来帮助检测ROM版本和SDK之间的差异。
你能确认我们对这个问题的理解是正确的吗?如果是,如何解决?特别是,当它涉及到大规模生产时,如何处理知道有相同的标签在相同的封装,但仍然包含不同的ROM版本的集成电路。有没有办法检索ROM版本?为什么有多个版本的SDK只与一个特定的ROM版本兼容,为什么这些复杂性不会被一个通用的SDK隐藏?
非常感谢。
德米特里
嗨,德米特里,
是的,你的理解是正确的,目前市场上有两个版本的585 SoC(通常应该有一个,最新的,但显然有残羹剩饭从以前的SoC修订)。因此,最新的芯片版本是AC,它与sdk6.0.4一起运行,而您的子板配备的是AB版本,它只与sdk6.0.2一起运行。如果您尝试在AB或AC硅片上运行不同的SDK,则会导致硬故障。如前所述,最新版本是AC,它将在市场上推出,并将与所有当前(sdk6.0.2除外)和未来的SDK一起运行。
谢谢你的对话
谢谢你的及时回复。不过,还有两个问题,你能回答吗?
1.现在如何识别IC是AB版还是AC版?
2.未来如何解决这个问题?我们周围的世界不是一成不变的,迟早难免会有改版广告等。如果没有办法区分,生产中如何处理这个品种?
非常感谢。
德米特里
嗨,德米特里,
谢谢你的对话
嗨,伙计们,
完全正确,零件号是一样的,这就是引起我们悲伤的原因。我们不得不通过显微镜看数字,即使在那时也几乎看不见。毕竟,当涉及到制造过程的自动化时,视觉识别是一件非常不方便的事情。在组装好的pcba可以用固件进行闪存之前,应该有更好的识别方法,比通过显微镜进行目视检查更好。至于发布新版585的计划,只有在理想的世界里才是真的。在现实生活中,ROM的内容是一个二进制blob,它表示软件(或者更确切地说是固件)。每一个软件都有漏洞,有些漏洞迟早会被发现的。没有人计划有bug,它们只是通过意外或更彻底的测试发现的。所以这只是一个时间问题,当一个新版本的ROM将被释放,然后我们将有同样的问题再次出现。
有没有更好的方法通过电子阅读来识别ROM版本?这个如何,通过读取以下SoC寄存器:
-CHIP_ID1_REG、CHIP_ID2_REG、CHIP_ID2_REG('芯片识别寄存器'),相应地包含0x35、0x38和0x35(从ASCII码转换为585),
-CHIP\u REVISION\u REG('CHIP REVISION register')包含0x41,可转换为'A',
-CHIP\u SWC\u REG('软件兼容性寄存器')包含“0”表示旧芯片,包含“1”表示最新芯片,看起来它是相应的ROM版本“B”和“C”。
寄存器对于用户应用程序是可读的,并且可以通过JLink(SEGGER)命令行界面发送命令通过JTAG读取,这两种方法都已经过测试和确认。
我们的解释正确吗?
非常感谢。
德米特里
嗨,德米特里,
正如我所提到的,我几乎不相信将来会有一个SoC版本来修复bug(ROM代码中的bug是通过新的SDK版本和补丁来处理的,而不是通过SoC的更新版本)。一个有效的方法告诉什么是硅版本的SoC你应该读地址0x5000320A,高字节总是0x20和低字节保持保持小版本0x01对应于B和0x02对应于C版本。
谢谢你的对话