14. OTP Programmer¶
“OTP程序员”工具用于烧录OTP内存和OTP报头。通过在开发过程中可视化和测试OTP图像,它有助于提高生产率,避免错误编程OTP头标志的致命错误。“OTP程序员”由三个子工具组成:“OTP映像”、“OTP头”和“OTP NVDS”。
14.1. OTP Image¶
此OTP工具允许将默认固件下载到SysRAM中,并使用用户定义的.hex/.ihex/.bin文件烧录OTP内存。下图显示了OTP图像选项卡:
在OTP图像选项卡的左侧,用户可以选择要下载到OTP内存的Intel十六进制或二进制文件。如果选择了“英特尔十六进制文件”,则会对其进行分析,并在“数据文件内容”表中显示其内容。如果选择了二进制文件,则表将保持为空,但日志消息指示已读取该文件及其大小(以字节为单位)。
On the right side of the OTP Image tab, the OTP Memory contents are shown. There are 3 actions associated with it:
Connect:作为读取内存内容和烧录OTP内存之前的第一步,用户必须通过按下“连接”按钮并等待“按下重置按钮”操作消息出现在日志上来建立与开发工具包的连接。与UART Booter类似,用户有15秒的时间按下reset按钮将默认固件文件下载到芯片。如果出现“CRC不匹配”,请再次按“连接”按钮,然后按电路板上的硬件重置按钮重新开始下载过程。
阅读:成功将固件文件下载到芯片后,用户可以按“读取”按钮读取OTP内存。
燃烧:如果选择了要下载的文件,用户可以按“刻录”按钮来刻录OTP内存。在执行实际刻录操作之前,对DA1468x、DA14585/6、DA1453x和DA1469x系列芯片进行以下检查。智能代码段™ 工具箱检查用户试图刻录的内存段是否已经包含数据。检查是在单词级别执行的。对于DA1468x和DA14585/6系列芯片,一个字的长度为8字节,当其值不同于0x00时包含数据;而对于DA1469x和DA1453x芯片,一个字的长度为4字节,当其值不同于0xffffff时包含数据。在OTP刻录过程中,将我们要刻录的每个字与已写入OTP内存中的相应字进行比较时,会出现三种情况(针对零为空值的DA1468x和DA14585/6系列芯片进行了说明):
- The word we are trying to burn to OTP memory includes zeroes and the respective word in OTP memory is non-zero: No action is taken.
- 我们试图烧录到OTP内存的单词包含非零,OTP内存中的相应单词是非零的,两个单词的内容不匹配。单词被替换为零,并且在日志窗口中显示警告。如果被替换为零的单词的地址太多,则需要一个名为“not\u writed”的文件_文字.txt'在设置文件的目录中创建,如果是CLI,则在“命令行日志”下创建。此文件包含所有无法写入的地址。
- 我们试图烧录到OTP内存中的单词包括非零,OTP内存中相应的单词是非零的,两个单词的内容是相同的同一个词以零代替。
For DA1469x family chips the same checks are performed with the difference that the empty value and the value with with which OTP words are replaced, if required, is 0xFFFFFFFF.
在刻录操作之后,会自动执行读取操作,以便用新数据刷新内存内容。请注意,对于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。
14.2. OTP标题¶
The ‘OTP Header’ tool is used for burning the OTP header. Before burning, it validates every header field to ensure that the OTP header is correctly programmed, avoiding in this way fatal mistakes which could damage the chip.
DA14580/581/583系列芯片的OTP头视图:
DA1468x系列芯片的OTP头视图:
DA14585/6系列芯片的OTP头视图:
DA14531芯片OTP头视图:
DA1469x系列芯片的OTP头视图:
如上所示,“OTP Header”工具主要由一个表组成,该表允许用户查看和编辑每个Header字段的值。请注意,有些字段是只读的;双击它们没有效果。通过从下拉菜单中选择值或双击并在输入字段中设置所需值来执行编辑。
Furthermore, some fields marked with是用户不应更改其值的字段,否则会有损坏芯片的巨大风险。如果用户要更改这些字段的值,程序将发出警告。
而地址标记为是一种特殊地址,其中值在每个原值和补值中存储两次,或者逐字存储。
这些值是十六进制值,大小等于表的“大小(字)”列中显示的值。对于DA14580/581/583和DA1469x芯片系列,字段均为4字节(4字节字)。对于DA1468x和DA14585/6芯片系列,字段通常为8字节,但也有一些字段超过8字节。
对于涉及更复杂配置逻辑的字段当鼠标悬停时会显示图标。当用户单击此图标时,会弹出一个合适的界面来编辑配置。
Some examples of multivalued fields are:
DA1468x芯片地址0x7F8EA28上的高速缓存体系结构设置:
DA1468x芯片地址0x7F8EA30上的串行配置映射:
Type of fields for DA14580/581/583 chip family:
在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芯片系列的字段类型:
- ‘Integer’: The same as for DA14580/581/583 chips. Integer fields are treated as little endian, meaning that they are reversed when burned to OTP memory and also that the value read to OTP memory is reversed and then presented to the OTP header table.
- “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个字节中。
14.2.1. OTP中的配置脚本(CS)¶
OTP Header of DA1469x and DA14531 chips includes the “Configuration Script” field. If the user presses the button that is visible on the value column of the table when user mouses over the Configuration Script row, the configuration script value is parsed and the commands it contains are presented in the following popup dialog (图50):
如果停止命令没有添加到CS的末尾,用户可以在从OTP内存读取的最后一个CS命令之后附加命令。烧录到OTP内存的命令以浅黄色突出显示。无法修改突出显示的命令。请注意,有效的CS应以start命令(0xa5a5)开头。每个CS命令由一个或多个单词组成。CMD编号是命令标识符。具有相同CMD编号的行属于同一命令。第2列表示命令字的地址,第3列表示每个命令字的值。通过查看第4列,用户可以看到命令的类型和小说明。为了添加新命令,用户必须选择命令的类型以及该命令在CS中的位置,然后按添加按钮。默认情况下,新命令添加到CS commands表的末尾。可用的命令类型有:起点,住手,寄存器配置,微调/校准,引导值,开发模式禁用和Uart STX超时. 要删除命令,用户必须选择要删除的命令的编号,然后按删除按钮。当Manage Configuration Script对话框打开,当按下“确定”按钮时。在将单个命令添加到CS commands表之前,将对其进行验证。验证错误显示在窗口顶部。当按下OK按钮时,用户可以通过选择忽略配置脚本验证错误复选框。下面给出了各个命令类型:
- 开始时间:表示有效的CS。它总是添加在CS commands表的开头,值为0xa5a5。
- 停止:表示CS结束。它总是添加在CS commands表的末尾,值为0x00000000。
- 寄存器配置:Consists of two 32-bit words, the first of which contains the address of an existing register and the second contains the data value of the register. These are always in pairs. When the user selects to add a寄存器配置向CS发出命令,弹出一个弹出窗口,显示以树状结构分组的可用寄存器。用户可以使用搜索框搜索包含在搜索框中输入的文本的特定寄存器或寄存器组。所选设备的可用寄存器的名称和地址是从支持包中指定的寄存器xml文件中读取的。
- 微调/校准:由一个等于0x9000YYXX的32位字组成,表示以下字不存储到寄存器,而是由表示命令值的SDK SW和YY字使用。XX表示命令的TCS组。为了添加微调/校准命令,用户必须首先指定字数(YY)和TCS组(XX)。如果指定了字数,则每个字将向表中添加一行,用户可以在其中填充每个字的值。
- 引导程序值:由一个等于0x6XXXXXXX的32位字组成,表示该值指向地址0xXXXXXXX处闪存中的闪存产品头。
- 开发模式禁用:Consists of one 32-bit word which is equal to 0x70000000, disabling the development mode. Development Mode is enabled by default at the initialization phase of the booter. The user’s confirmation is required in order to add the disable development mode command to the CS.
- Uart STX超时:Consists of One 32 bit word which is equal to 0x8XXXXXXX. The XXXXXXX is used to program the selected STX timeout in multiples of 100uS. So i.e. 0x80000040 is 40x100uS = 4mS.
14.2.2. OTP标题操作¶
以下操作可用:
Connect:用户必须与th建立连接e Development Kit if no previous connection has been established via the ‘OTP Image’ tool. Until the connection is established the ‘Read from memory’ and ‘Burn’ buttons are disabled.
从内存读取:成功将固件文件下载到芯片后,用户可以按“从内存读取”按钮读取内存中标头的当前内容。
燃烧:用户可以按“烧录”按钮烧录OTP标题和标题表的当前内容。在执行burn操作之前,将执行一组验证测试,以确保每个头字段的正确性。下图是头验证测试期间打印到日志的消息的示例。
当验证测试失败或用户将要对标题内容进行重要更改时,弹出对话框会相应地通知用户。对于每个对话框,用户可以选择停止烧录过程或忽略它并继续验证检查。目前正在对DA14580/581/583 OTP头执行以下验证测试:
- Last burn validation: The existence of ‘header_log.txt’ file is checked. If found, a message informs the user when the memory was burned for the last time.
- DMA长度验证:“DMA长度”值应始终小于32768字节。如果大于或等于32768字节,并且用户忽略DMA长度检查弹出对话框,则自动将其设置为允许的最大值。此外,如果文件已加载到OTP图像上,则检查DMA长度是否高于该文件中的数据字节数。
- 重新映射标志选择:如果“重新映射标志”值已更改为0,则显示信息性消息。
- 客户代码签名验证:如果设置了“Signature algorithm”(签名算法)字段,并且选择了一个文件下载到OTP图像,它将计算图像文件代码的哈希值。计算的值应与客户代码签名字段的值匹配。
- 微调值验证:地址0x47f7C到0x47f90处的字段根据Dialog提供的最新微调值进行验证。最新的修剪值包含在文件的trimValues.txt文件'位于SmartSnippets的'resources'文件夹下™ 工具箱工作区。该文件还包含一个时间戳,指示上次更新修剪值的时间。如果用户在微调值字段中输入的值与相应的微调值不匹配trimValues.txt文件文件,则会相应地通知用户。
- Calibration flag validation: The ‘calibration flag’ should be in accordance with the trim values that have been set. The description field of the calibration flag indicates which bit corresponds to which trim value. If a trim value has been set and the corresponding bit of the calibration flag has not been set or vice versa, the user will be notified accordingly.
- 32KHz源选择:显示一条消息,通知用户所选的32KHz源。
- Package selection: Displays a message informing the user about the selected package.
- 标头已写入验证:在执行实际刻录操作之前,SmartSnippets™ 工具箱检查用户试图刻录的内存段是否已经包含数据,并相应地通知用户;是否继续刻录由用户决定。
After a burn action, a read action is automatically performed in order to refresh the memory contents with the new data. Also, the entire OTP Header section is appended (together with a timestamp) to ‘header_log.txt’ file located under the settings file working directory for future reference.
导出头文件:用于将标头导出为二进制(.bin)文件或与英特尔十六进制(.hex)文件格式非常相似的文件格式。
从文件导入头: Used for selecting a file in binary (.bin) format or in SmartSnippets™ Toolbox’ Intel-like format (.hex), containing the OTP header, and importing it into the header table for editing and burning. The imported header file is advised to be a file that has been generated with the export header to file button of the OTP header. When importing a file in OTP header, it is validated that the file contains the expected number of parameters (22 for DA14580/581/583 chips) and that each parameter has the correct length, as it is indicated by the second column of the header table. If the validation tests fail, the file cannot be imported in OTP header, since it is risky to import a file containing wrong header data and burn it in OTP header.
In case of ‘Protected’ fields when importing from file or read from memory, the value is checked with its reverse value. If no match is found a warning message appears on log window.
14.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_TAG_APP_BLE_ADV_DATA
- NVDS标签应用程序扫描响应数据
- NVDS\标签\设备\名称
- NVDS\标签\ BD\地址