12OTP程序员¶
“OTP程序员”工具用于烧录OTP内存和OTP报头。通过在开发过程中可视化和测试OTP图像,它有助于提高生产率,避免错误编程OTP头标志的致命错误。“OTP程序员”由三个子工具组成:“OTP映像”、“OTP头”和“OTP NVDS”。
12.1. OTP图像¶
此OTP工具允许将默认固件下载到SysRAM中,并使用用户定义的.hex/.ihex/.bin文件烧录OTP内存。下图显示了OTP图像选项卡:
在OTP图像选项卡的左侧,用户可以选择要下载到OTP内存的Intel十六进制或二进制文件。如果选择了“英特尔十六进制文件”,则会对其进行分析,并在“数据文件内容”表中显示其内容。如果选择了二进制文件,则表将保持为空,但日志消息指示已读取该文件及其大小(以字节为单位)。
在OTP图像选项卡的右侧,显示OTP内存内容。与之相关的操作有3个:
连接:作为读取内存内容和烧录OTP内存之前的第一步,用户必须通过按下“连接”按钮并等待“按下重置按钮”操作消息出现在日志上来建立与开发工具包的连接。与UART Booter类似,用户有15秒的时间按下reset按钮将默认固件文件下载到芯片。如果出现“CRC不匹配”,请再次按“连接”按钮,然后按电路板上的硬件重置按钮重新开始下载过程。
阅读:成功将固件文件下载到芯片后,用户可以按“读取”按钮读取OTP内存。
燃烧:如果选择了要下载的文件,用户可以按“刻录”按钮来刻录OTP内存。在执行实际刻录操作之前,对DA1468x、DA14585/6和DA1469x系列芯片进行以下检查。智能代码段™ 工具箱检查用户试图刻录的内存段是否已经包含数据。检查是在单词级别执行的。对于DA1468x和DA14585/6系列芯片,一个字的长度为8字节,当其值不同于0x00时包含数据;而对于DA1469x芯片,一个字的长度为4字节,当其值不同于0xffffff时包含数据。在OTP刻录过程中,将我们试图刻录的每个字与OTP内存中已写入的相应字进行比较时,会出现三种情况(针对零为空值的DA1468x和DA14585/6系列芯片进行了说明):
- 我们试图烧录到OTP内存中的单词包括零,OTP内存中的相应单词是非零的:不采取任何操作。
- 我们试图烧录到OTP内存的单词包含非零,OTP内存中的相应单词是非零的,两个单词的内容不匹配。单词被替换为零,并且在日志窗口中显示警告。如果被替换为零的单词的地址太多,则需要一个名为“not\u writed”的文件_文字.txt'在设置文件的目录中创建,如果是CLI,则在“命令行日志”下创建。此文件包含所有无法写入的地址。
- 我们试图烧录到OTP内存中的单词包括非零,OTP内存中相应的单词是非零的,两个单词的内容是相同的同一个词以零代替。
对于DA1469x系列芯片,将执行相同的检查,不同的是空值和替换OTP字的值(如果需要)为0xFFFFFF。
在刻录操作之后,会自动执行读取操作,以便用新数据刷新内存内容。请注意,对于DA1468x-00芯片,默认情况下禁用刻录操作,除非在属性文件中将“ENABLE\u OTP\u burn\u 68xAD”属性设置为true。当选择DA14583-00芯片时,用户可以选择通过OTP图像自动烧录“Advanced Bootloader Offset and Length”(高级引导加载程序偏移量和长度)标题字段,其中包含在OTP中烧录的自定义引导加载程序的偏移量和长度。弹出对话框请求烧录标题字段的权限:
Burn操作还检查是否将写入部分OTP头。如果为true,则弹出以下警告:
保存:按Save,用户可以将otp内存内容保存到文件中。将弹出一个文件选择器对话框,以便用户为OTP内存选择输出文件。
“OTP内存中的偏移量”字段允许用户输入开始读取或刻录操作的偏移量(十六进制字节数)。
DA14580/581/583和DA1468x芯片中的单元是“一次性可编程”的,这意味着它们在包含逻辑0电平时未编程。编程后,它们将成为逻辑1。
12.2. OTP标题¶
“OTP头”工具用于烧录OTP头。在刻录之前,它验证每个报头字段,以确保OTP报头被正确编程,从而避免可能损坏芯片的致命错误。
DA14580/581/583系列芯片的OTP头视图:
DA1468x系列芯片的OTP头视图:
DA14585/6系列芯片的OTP头视图:
DA1469x系列芯片的OTP头视图:
如上所示,“OTP Header”工具主要由一个表组成,该表允许用户查看和编辑每个Header字段的值。请注意,有些字段是只读的;双击它们没有效果。通过从下拉菜单中选择值或双击并在输入字段中设置所需值来执行编辑。
此外,有些字段标记为是用户不应更改其值的字段,否则会有损坏芯片的巨大风险。如果用户要更改这些字段的值,程序将发出警告。
而地址标记为是一种特殊地址,其中值在每个原值和补值中存储两次,或者逐字存储。
这些值是十六进制值,大小等于表的“大小(字)”列中显示的值。对于DA14580/581/583和DA1469x芯片系列,字段均为4字节(4字节字)。对于DA1468x和DA14585/6芯片系列,字段通常为8字节,但也有一些字段超过8字节。
对于涉及更复杂配置逻辑的字段当鼠标悬停时会显示图标。当用户单击此图标时,会弹出一个合适的界面来编辑配置。
多值字段的一些示例如下:
DA1468x芯片地址0x7F8EA28上的高速缓存体系结构设置:
DA1468x芯片地址0x7F8EA30上的串行配置映射:
DA14580/581/583芯片系列的字段类型:
在DA14580/581/583芯片中,有两种类型的字段:
- “Integer”:字段被视为整数,这意味着如果用户根据字段大小输入的十六进制值少于预期值,则在将该值烧录到OTP内存之前,该值将用前导零进行修补(例如,对于1字字段,“14580”变为“00014580”)。对于“整数”类型的字段,字的最低有效字节存储在最小的地址(小endian)中。E、 g.如果用户为字段“DMA Length”键入0A0B0C0D,0x0A将写入0x47FFB,0x0D将写入0x47FF8。
- “String”:字段被视为一个字符串,这意味着如果用户根据字段大小输入的十六进制值少于预期值,则在将其烧录到OTP内存之前,该值将用尾随的零进行修补(例如,对于一个1字字段,“14580”变为“14580000”)。对于“string”类型的字段,字的最高有效(最左边)字节存储在最小的地址(big endian)中。E、 g.如果用户为“设备唯一ID”字段键入0A0B0C0D,0x0A将写入0x47FD4,0x0D将写入0x47FD7。
大多数包含组合框的字段不能多次编程。例如,如果“RC32KHz”(十六进制值0xAA)已作为32KHz源烧录,则不允许使用“XTAL32KHz”值(十六进制值0x00)覆盖它。在这种情况下,组合框被禁用以避免混淆。
DA1468x、DA14585/6和DA1469x芯片系列的字段类型:
- “整数”:与DA14580/581/583芯片相同。整数字段被视为小endian,这意味着它们在烧录到OTP内存时被反转,而且读取到OTP内存的值被反转,然后呈现到OTP头表。
- “String”:与DA14580/581/583芯片相同。字符串字段被视为big-endian,这意味着一个值会被烧录到OTP内存中,就像它在OTP头中显示的一样。
- “Flag”:类型为“Flag”的字段表示为下拉列表,用户在其中选择所需的值。
- “Protected”:只有DA1468x头包含受保护的字段。DA1468x头中有两个字段类型为“Protected”,微调和校准值(只读)和ECC图像长度(可写). 这些字段被视为整数。从“ECC Image Length”的8个字节中,4个字节包含值,其他4个字节包含反向值。这是出于安全考虑。每次读取值时,都会与字段其余部分的反向值进行检查,以查看读取的值是否匹配。在写操作中,反向值与实际值一起生成和存储。另一个字段“微调和校准值”是只读的,由384字节组成。这些字节被分成8个字节,每个字节由4字节值和4字节反向值组成,如上所述。这些字节存储“微调或校准”地址及其旁边的值。你可以看到这个表格点击. 当用户编辑“受保护”字段时,它只输入值部分。这就是为什么“ECC image length”要求8字节而不是16字节的值。用户输入值的倒数将自动生成并存储在字段的其他8个字节中。
12.2.1. OTP中的配置脚本(CS)¶
DA1469x芯片的OTP头包含“配置脚本”字段。当用户将鼠标移到配置脚本行上时,如果用户按下表的value列上可见的按钮,配置脚本值将被解析,它包含的命令将显示在下面的弹出对话框中(图39):
如果停止命令没有添加到CS的末尾,用户可以在从OTP内存读取的最后一个CS命令之后附加命令。烧录到OTP内存的命令以浅黄色突出显示。无法修改突出显示的命令。请注意,有效的CS应以start命令(0xa5a5)开头。每个CS命令由一个或多个单词组成。CMD编号是命令标识符。具有相同CMD编号的行属于同一命令。第2列表示命令字的地址,第3列表示每个命令字的值。通过查看第4列,用户可以看到命令的类型和小说明。为了添加新命令,用户必须选择命令的类型以及该命令在CS中的位置,然后按添加按钮。默认情况下,新命令添加到CS commands表的末尾。可用的命令类型有:起点,住手,寄存器配置,微调/校准,引导值,开发模式禁用和Uart STX超时. 要删除命令,用户必须选择要删除的命令的编号,然后按删除按钮。当管理配置脚本对话框打开,当按下“确定”按钮时。在将单个命令添加到CS commands表之前,将对其进行验证。验证错误显示在窗口顶部。当按下OK按钮时,用户可以通过选择忽略配置脚本验证错误复选框。下面给出了各个命令类型:
- 开始时间:表示有效的CS。它总是添加在CS commands表的开头,值为0xa5a5。
- 停止:表示CS结束。它总是添加在CS commands表的末尾,值为0x00000000。
- 寄存器配置:由两个32位字组成,第一个包含现有寄存器的地址,第二个包含寄存器的数据值。它们总是成对的。当用户选择添加寄存器配置向CS发出命令,弹出一个弹出窗口,显示以树状结构分组的可用寄存器。用户可以使用搜索框搜索包含在搜索框中输入的文本的特定寄存器或寄存器组。所选设备的可用寄存器的名称和地址是从支持包中指定的寄存器xml文件中读取的。
- 微调/校准:由一个等于0x9000YYXX的32位字组成,表示以下字不存储到寄存器,而是由表示命令值的SDK SW和YY字使用。XX表示命令的TCS组。为了添加微调/校准命令,用户必须首先指定字数(YY)和TCS组(XX)。如果指定了字数,则每个字将向表中添加一行,用户可以在其中填充每个字的值。
- 引导程序值:由一个等于0x6XXXXXXX的32位字组成,表示该值指向地址0xXXXXXXX处闪存中的闪存产品头。
- 开发模式禁用:由一个等于0x70000000的32位字组成,禁用开发模式。默认情况下,在引导程序的初始化阶段启用开发模式。需要用户确认才能将disable development mode命令添加到CS。
- Uart STX超时:由一个等于0x8xxxxxx的32位字组成。XXXXXXX用于以100uS的倍数对所选STX超时进行编程。因此,即0x8000040为40x100uS=4mS。
12.2.2. OTP标题操作¶
以下操作可用:
连接:如果以前没有通过“OTP映像”工具建立连接,则用户必须建立与开发工具包的连接。在建立连接之前,“从内存读取”和“刻录”按钮将被禁用。
从内存读取:成功将固件文件下载到芯片后,用户可以按“从内存读取”按钮读取内存中标头的当前内容。
燃烧:用户可以按“烧录”按钮烧录OTP标题和标题表的当前内容。在执行burn操作之前,将执行一组验证测试,以确保每个头字段的正确性。下图是头验证测试期间打印到日志的消息的示例。
当验证测试失败或用户将要对标题内容进行重要更改时,弹出对话框会相应地通知用户。对于每个对话框,用户可以选择停止烧录过程或忽略它并继续验证检查。目前正在对DA14580/581/583 OTP头执行以下验证测试:
- 上次刻录验证:是否存在“header”_日志.txt'文件已选中。如果找到,则会有一条消息通知用户上次烧录内存的时间。
- DMA长度验证:“DMA长度”值应始终小于32768字节。如果大于或等于32768字节,并且用户忽略DMA长度检查弹出对话框,则自动将其设置为允许的最大值。此外,如果文件已加载到OTP图像上,则检查DMA长度是否高于该文件中的数据字节数。
- 重新映射标志选择:如果“重新映射标志”值已更改为0,则显示信息性消息。
- 客户代码签名验证:如果设置了“Signature algorithm”(签名算法)字段,并且选择了一个文件下载到OTP图像,它将计算图像文件代码的哈希值。计算的值应与客户代码签名字段的值匹配。
- 微调值验证:地址0x47f7C到0x47f90处的字段根据Dialog提供的最新微调值进行验证。最新的修剪值包含在文件的trimValues.txt文件'位于SmartSnippets的'resources'文件夹下™ 工具箱工作区。该文件还包含一个时间戳,指示上次更新修剪值的时间。如果用户在微调值字段中输入的值与相应的微调值不匹配trimValues.txt文件文件,则会相应地通知用户。
- 校准标志验证:“校准标志”应与已设置的微调值一致。校准标志的描述字段指示哪个位对应于哪个微调值。如果已设置微调值,且校准标志的相应位未设置,反之亦然,则将相应地通知用户。
- 32KHz源选择:显示一条消息,通知用户所选的32KHz源。
- 包选择:显示一条消息,通知用户有关所选包的信息。
- 标头已写入验证:在执行实际刻录操作之前,SmartSnippets™ 工具箱检查用户试图刻录的内存段是否已经包含数据,并相应地通知用户;是否继续刻录由用户决定。
在刻录操作之后,会自动执行读取操作,以便用新数据刷新内存内容。另外,整个OTP报头部分(连同时间戳)被附加到“Header”中_日志.txt'文件位于设置文件工作目录下,以供将来参考。
导出头文件:用于将标头导出为二进制(.bin)文件或与英特尔十六进制(.hex)文件格式非常相似的文件格式。
从文件导入头:用于选择二进制(.bin)格式或SmartSnippets格式的文件™ 工具箱的类英特尔格式(.hex),包含OTP头,并将其导入头表进行编辑和刻录。建议导入的头文件是使用OTP头的export header to file按钮生成的文件。导入OTP头文件时,验证文件是否包含预期数量的参数(DA14580/581/583芯片为22个),以及每个参数是否具有正确的长度,如头表第二列所示。如果验证测试失败,则无法在OTP头中导入该文件,因为导入包含错误头数据的文件并将其烧录到OTP头中是有风险的。
从文件导入或从内存读取时,如果是“受保护”字段,则使用其反向值检查该值。如果找不到匹配项,日志窗口上将显示警告消息。
12.3. OTP NVDS公司¶
注意
此工具适用于DA14580/581/583芯片系列。
OTP-NVDS工具的功能与OTP头的功能非常相似,允许用户读写NVDS内存块。通过编辑偏移文本字段,用户可以更改执行刻录和读取操作的地址。偏移量(以字节为单位)必须是介于0x0000和0x8000之间的十六进制数。对于burn操作,偏移量应使最后一个NVDS数据字节将被写入的地址小于OTP头开始的地址。
OTP NVDS选项卡的示例如下所示:
当按下刻录按钮时,验证参数NVDS\u TAG\u APP\u BLE\u ADV\u DATA、NVDS\u TAG\u APP\u BLE\u SCAN\u RESP\u DATA和NVDS\u TAG\u DEVICE\u NAME的长度是否分别等于参数ADV\u DATA\u TAG\u LEN、SCAN\u RESP\u DATA\u TAG\u LEN和DEVICE\u NAME\u TAG\u LEN指示的值。如果验证测试失败,将通知用户,并且用户可以选择继续执行烧录操作或取消烧录操作。与OTP头类似,有整数类型和字符串类型字段。对于OTP NVD,以下字段被视为字符串:
- NVDS标签应用程序高级数据
- NVDS标签应用程序扫描响应数据
- NVDS\标签\设备\名称
- NVDS\标签\ BD\地址