15.OTP程序员

“OTP编程器”工具用于刻录OTP内存和OTP报头。通过在开发过程中对OTP映像进行可视化和测试,可以帮助提高工作效率,并避免错误编程OTP报头标志的致命错误。“OTP程序员”包括三个子工具:“OTP图像”,“OTP头”和“OTP NVDS”。

15.1.OTP形象

这个OTP工具支持将默认固件下载到SysRAM中,并使用用户定义的.hex/.ihex/.bin文件刻录OTP内存。OTP图像选项卡如下图所示:

. . / _images / otp_image_680_loadfile_memory.png

图41OTP图像标签

在OTP Image选项卡的左侧,用户可以选择要下载到OTP内存的Intel十六进制或二进制文件。如果选择了英特尔十六进制文件,将对其进行解析,并在“数据文件内容”表中显示其内容。如果选择了二进制文件,则表仍然为空,但会有一条日志消息表明已读取该文件及其字节大小。

在OTP图像选项卡的右侧,显示OTP内存内容。有3个与之相关的动作:

连接:作为读取内存内容和刻录OTP内存之前的第一步,用户必须按下“Connect”按钮,并等待“Press the reset button”操作消息出现在日志上,以建立与开发工具包的连接。与UART Booter类似,用户有15秒的时间按下重置按钮,将默认固件文件下载到芯片中。如果出现“CRC不匹配”,请再次按下“连接”按钮,然后按下单板上的硬件复位按钮,重新启动下载过程。

:成功下载固件文件到芯片后,用户可以按“Read”按钮读取OTP内存。

燃烧:选中待下载的文件后,按燃烧按钮烧掉OTP内存。在执行实际刻蚀操作之前,对DA1468x、DA14585/6、DA1453x和DA1469x系列芯片进行以下检查。SmartSnippets™工具箱检查用户试图刻录的内存段是否已经包含数据。检查是在单词级别上执行的。对于DA1468x和DA14585/6家族芯片,当一个字的值不同于0x00时,一个字的长度为8字节,包含数据;而对于DA1469x和DA1453x芯片,当一个字的值不同于0xFFFFFFFF时,一个字的长度为4字节,包含数据。在OTP刻录期间,当将我们试图刻录的每个单词与已写入OTP内存中的相应单词进行比较时,有三种情况(用于DA1468x和DA14585/6系列芯片,其中零为空值):

  1. 我们试图刻录到OTP内存中的单词包含零,并且OTP内存中的相应单词非零:不采取任何操作。
  2. 我们试图刻录到OTP内存中的单词包含非零,并且OTP内存中各自的单词非零,并且两个单词的内容不匹配。该词被替换为零,并在日志窗口中显示警告。如果被替换为零的单词的地址太多,则在设置文件的目录中创建一个名为“not_written_words.txt”的文件,或者在CLI的情况下在“Command_Line_Logs”下创建。该文件包含所有不能写入的地址。
  3. 我们试图刻录到OTP内存中的单词包含非零,并且OTP内存中的单词各自为非零,并且两个单词的内容是相同的。Word被无声地替换为0。

对于DA1469x系列芯片,执行相同的检查,如果需要,空值和替换OTP字的值的差值为0xFFFFFFFF。

. . / _images / otp_not_written_warning.png

图42在非零内存位置上写入零时发出警告

在烧录操作之后,将自动执行读取操作,以便使用新数据刷新内存内容。注意,对于DA1468x-00芯片,刻写操作默认是禁用的,除非在属性文件中将“ENABLE_OTP_BURN_68xAD”属性设置为true。当选择DA14583-00芯片时,用户可以选择自动刻录“高级引导加载器偏移量和长度”头字段,并通过OTP映像在OTP中刻录自定义引导加载器的偏移量和长度。弹出对话框请求允许刻录报头字段:

. . / _images / da145883OtpImage.png

图43请求刻录报头字段的权限

刻录动作也检查OTP报头的一部分是否将被写入。如果为真,则弹出以下警告:

. . / _images / otp_write_part_header.png

图44继续写OTP报头

保存:通过按Save键,用户可以将otp内存内容保存到文件中。将弹出一个文件选择器对话框,以便用户为OTP内存选择输出文件。

' Offset in OTP Memory '字段允许用户输入读取或刻录操作开始的偏移量(十六进制字节数)。

DA14580/581/583和DA1468x芯片中的单元是“一次性可编程”的,这意味着当包含逻辑0电平时,它们是不可编程的。编程之后,它们就变成了逻辑1。

15.2.OTP头

“OTP头”工具用于刻录OTP头。在刻录之前,它验证每个报头字段,以确保OTP报头被正确编程,以这种方式避免可能损坏芯片的致命错误。

DA14580/581/583系列芯片的OTP头视图:

. . / _images / otp_header_580_read_from_memory.png

图45DA14580/581/583系列芯片的OTP头

DA1468x系列芯片的OTP头视图:

. . / _images / AE_chip_Header.png

图46DA1468x系列芯片的OTP头

DA14585/6系列芯片的OTP头视图:

. . / _images / 585 _chip_header.png

图47DA14585/6家族芯片的OTP头

DA14531芯片OTP头的视图:

. . / _images / 531 _chip_header.jpg

图48DA14531芯片OTP头

DA1469x系列芯片的OTP头视图:

. . / _images / 69 x_chip_header.png

图49DA1469x系列芯片的OTP头

如上所示,“OTP报头”工具主要由一个表组成,允许用户查看和编辑每个报头字段的值。注意,有些字段是只读的;双击它们没有效果。通过从下拉菜单中选择值或双击并在输入字段中设置所需值来执行编辑。

此外,一些领域标有yellow-mark-header是用户不应该更改其值的字段,否则有很大的破坏芯片的风险。程序将警告用户,如果他要改变这些字段的值。

. . / _images / protected_fields_warning.png

图50当用户试图烧毁受保护的字段时弹出警告。

而标有red-mark-header是特殊地址,其中值在每个原始值和补充值中存储两次,或者逐字存储。

这些值是十六进制的值,其大小等于表的“size (words)”列中显示的值。对于DA14580/581/583和DA1469x芯片家族,字段都是4字节(4字节字)。对于DA1468x和DA14585/6芯片家族的字段通常是8字节,但也有一些超过8字节。

对于涉及更复杂配置逻辑的字段,请使用aedit_cell_icon鼠标悬停时显示图标。当用户单击这个图标时,会弹出一个合适的界面来编辑配置。

多值字段的一些例子是:

DA1468x芯片地址0x7F8EA28的Cache Architecture设置:

. . / _images / cache_architecture_680.png

图51Cache架构设置

DA1468x芯片地址0x7F8EA30的串行配置映射:

. . / _images / serial_configuration_mapping_680.png

图52串口配置映射

DA14580/581/583芯片系列字段类型:

在DA14580/581/583芯片中有两种类型的字段:

  1. ' Integer ':字段被视为整数,这意味着如果用户根据字段大小输入的十六进制值少于预期值,则在将其刻录到OTP内存之前,将值修补为前导零(例如,对于一个1字字段,' 14580 '变成' 00014580 ')。对于' integer '类型的字段,单词的最小有效字节存储在最小的地址中(little-endian)。例如,如果用户输入“DMA长度”字段为0A0B0C0D, 0x0A将写入0x47FFB, 0x0D将写入0x47FF8。
  2. ' String ': field被视为字符串,这意味着如果用户根据字段大小输入的十六进制值比预期的要少,那么在将其刻录到OTP内存之前,值会被补上后面的零(例如,对于一个1字字段,' 14580 '变成' 14580000 ')。对于' string '类型的字段,一个单词的最重要(最左边)字节存储在最小的地址(big-endian)中。例如,如果用户输入“设备唯一ID”字段为0A0B0C0D, 0x0A将被写入0x47FD4, 0x0D将被写入0x47FD7。

大多数包含组合框的字段不能被编程多次。例如,如果' RC32KHz '(十六进制值0xAA)已被烧录为32KHz源,则不允许用' XTAL32KHz '值(十六进制值0x00)覆盖它。在这种情况下,将禁用组合框以避免混淆。

DA1468x、DA14585/6和DA1469x芯片家族的字段类型:

  1. ' Integer ':与DA14580/581/583芯片相同。整数字段被视为小端序,这意味着它们在写入OTP内存时是反向的,而且读取到OTP内存的值也是反向的,然后呈现给OTP报头表。
  2. ' String ':与DA14580/581/583芯片相同。字符串字段被视为大端序,这意味着一个值被精确地刻录到OTP内存中,就像它在OTP报头中所显示的那样。
  3. ' Flag ': ' Flag '类型的字段表示为下拉列表,用户可以在其中选择所需的值。
  4. ' Protected ':只有DA1468x报头包含受保护字段。在DA1468x报头中,有两个字段类型为“Protected”,修整和校准值(只读)而且ECC图像长度(可写).这些字段被视为整数。在“ECC图像长度”的8个字节中,4个字节包含该值,其他4个字节包含相反的值。这是出于安全考虑。每次读取值时,它都会与字段其余部分的反向值进行检查,以查看读取的值是否匹配。在写时,反向值被产生,并与实值一起存储。另一个字段' Trim and calibration values '是只读的,由384个字节组成。这些字节被分成8个字节,每个字节由4个字节值和4个字节反向值组成,如上所述。这些字节存储“修剪或校准”地址及其旁边的值。,可以看到这个表edit_cell_icon.当用户编辑一个“受保护”字段时,它只输入值部分。这就是为什么“ECC图像长度”要求8字节而不是16字节的值。用户输入值的反向自动生成并存储在字段的其他8个字节中。

15.2.1.OTP中的CS配置脚本

DA1469x和DA14531芯片的OTP报头包含“Configuration Script”字段。当用户将鼠标移到“配置脚本”行上时,如果用户按下表的值列上可见的按钮,则配置脚本值将被解析,其中包含的命令将在以下弹出对话框中显示(图54):

. . / _images / csInOtp.png

图53管理DA1469x的配置脚本对话框

. . / _images / csInOtp531.jpg

图54管理DA14531的配置脚本对话框

如果STOP命令没有被添加到CS的末尾,用户可以在从OTP内存中读取的最后一个CS命令之后追加命令。已刻录到OTP内存的命令以浅黄色突出显示。高亮显示的命令不能修改。注意,有效的CS应该以start命令(0xA5A5A5A5)开始。每个CS命令由一个或多个单词组成。CMD编号是命令的标识符。具有相同CMD号的行属于相同的命令。第2列表示命令字的地址,第3列表示每个命令字的值。通过查看第4列,用户可以看到命令的类型和一小段描述。为了添加新命令,用户必须选择命令的类型以及该命令应该放在CS中的位置,然后按下添加按钮。默认情况下,在CS命令表的末尾添加一个新命令。可选命令类型包括:开始停止寄存器的配置修剪/校准橄榄球员的价值开发模式禁用而且Uart STX超时.删除命令时,用户需要选择要删除的命令编号,然后按删除按钮。当管理配置脚本对话框打开,当按下OK按钮。在将单个命令添加到CS命令表之前,将对其进行验证。验证错误显示在窗口顶部。单击“确定”按钮时,用户可以禁用验证忽略配置脚本验证错误复选框。下面列出了单独的命令类型:

  1. 开始:有效的CS。它总是添加在CS命令表的开头,值为0xA5A5A5A5。
  2. 站:CS结束。它总是添加在CS命令表的末尾,值为0x00000000。
  3. 寄存器配置:由两个32位字组成,第一个包含现有寄存器的地址,第二个包含寄存器的数据值。它们总是成对的。当用户选择添加寄存器的配置命令到CS时,会出现一个弹出窗口,显示分组为树状结构的可用寄存器。用户可以使用搜索框搜索包含搜索框中输入的文本的特定寄存器或寄存器组。从支持包中指定的寄存器的xml文件中读取所选设备的可用寄存器的名称和地址。
. . / _images / csRegisterConf.png

图55在CS中为DA1469x注册配置

. . / _images / csRegisterConf531.jpg

图56在CS中为DA14531注册名称包含“时间”的选择

  1. 修剪/校准:由一个32位字组成,等于0x9000YYXX,表示下面的字不存储到寄存器中,而是由代表命令值的SDK SW和YY字使用。XX表示命令的TCS组。为了添加Trim/Calibration命令,用户必须先指定单词数(YY)和TCS组(XX),当指定单词数时,每个单词添加一行到表中,用户可以在表中填充每个单词的值。
. . / _images / csTrimCalib.png

图57在CS中修整/校准值

  1. 橄榄球员价值:由一个32位字组成,它等于0x6XXXXXXX,表示这是一个指向Flash中地址为0xXXXXXXX的Flash产品头的值。
. . / _images / csBooterVal.png

图58CS中的引导值

  1. 开发模式禁用:由一个32位字组成,等于0x70000000,禁用开发模式。开发模式在启动程序的初始化阶段默认启用。在CS中添加禁用开发模式命令需要用户确认。
. . / _images / csDevelDisable.png

图59禁用CS中的开发模式

  1. Uart STX超时:由一个等于0x8XXXXXXX的32位字组成。XXXXXXX用于以100uS的倍数对所选的STX超时进行编程。例如,0x80000040是40x100uS = 4mS。
. . / _images / csStxTimeout.png

图60在CS中指定Uart STX超时

15.2.2.OTP报头动作

可执行以下操作:

连接:如果以前没有透过“OTP Image”工具建立连接,使用者必须先与开发套件建立连接。在连接建立之前,“从内存中读取”和“刻录”按钮是禁用的。

凭记忆阅读:成功将固件文件下载到芯片后,用户可以按“Read from memory”按钮读取内存中报头的当前内容。

燃烧:用户可以按' Burn '按钮将OTP报头与报头表的当前内容一起烧掉。在执行刻录操作之前,将执行一组验证测试,以确保每个报头字段的正确性。下图是在报头验证测试期间打印到日志中的消息示例。

. . / _images / otp_header_580_log.png

图61DA14580/581/583头验证测试

当验证测试失败或用户要对报头内容进行重要更改时,会出现一个弹出对话框相应地通知用户。对于每个对话框,用户可以选择停止刻录过程或忽略它并继续进行验证检查。目前正在对DA14580/581/583 OTP报头执行以下验证测试:

  1. 最后一次刻录验证:检查' header_log.txt '文件的存在。如果找到,则一条消息通知用户内存最后一次烧录的时间。
  2. DMA长度验证:“DMA长度”值应该总是小于32768字节。如果它大于或等于32768字节,并且用户忽略DMA长度检查弹出对话框,则自动将其设置为允许的最大值。此外,如果OTP映像上加载了一个文件,则检查DMA长度是否高于该文件中的数据字节数。
  3. 重映射标志选择:如果“重映射标志”值已更改为0,则显示一条提示消息。
  4. 客户代码签名验证:如果已经设置了“签名算法”字段,并且选择了一个文件下载到OTP图像,它会计算图像文件代码的哈希值。计算值应与“客户代码签名”字段的值匹配。
  5. 修整值验证:地址0x47f7C到0x47f90的字段根据Dialog提供的最新修整值进行验证。最新的修剪值包含在文件' trimValues.txt '中,位于SmartSnippets™Toolbox工作区的' resources '文件夹下。该文件还包括一个时间戳,指示最后一次更新修剪值的时间。如果用户在修剪值字段中输入的值与trimValues.txt文件中相应的修剪值不匹配,则会相应地通知用户。
  6. 校准标志验证:“校准标志”应与已设置的配平值一致。校准标志的描述字段表示哪个位对应哪个微调值。如果已设置校正值而校准标志的相应位未设置,反之亦然,则会相应地通知用户。
  7. 32KHz源选择:显示一条消息,告知用户所选择的32KHz源。
  8. 包选择:显示一条通知用户所选包的消息。
  9. 头已写验证:在执行实际的烧录操作之前,SmartSnippets™工具箱检查用户正在尝试烧录的内存段是否已经包含数据,并相应地通知用户;这是由用户决定是否继续进行燃烧或不。

在烧录操作之后,将自动执行读取操作,以便使用新数据刷新内存内容。此外,整个OTP Header部分(连同时间戳)被追加到位于设置文件工作目录下的' header_log.txt '文件中,以供将来参考。

导出头文件:用于将头文件导出为二进制(.bin)文件或非常类似于Intel十六进制(.hex)的文件格式。

从文件导入头文件:用于选择二进制(.bin)格式或SmartSnippets™Toolbox ' Intel-like format (.hex)格式的文件,包含OTP头,并将其导入头表中进行编辑和刻录。导入的头文件建议为已使用OTP头的“export header to file”按钮生成的文件。当在OTP报头中导入文件时,验证文件是否包含预期的参数数量(DA14580/581/583芯片为22个),并且每个参数都具有正确的长度,正如报头表的第二列所指示的那样。如果验证测试失败,则不能在OTP头中导入文件,因为导入包含错误头数据的文件并在OTP头中刻录是有风险的。

当从文件导入或从内存读取时,如果是“Protected”字段,则用其反向值检查该值。如果没有找到匹配,则在日志窗口上显示警告消息。

15.2.3.刻录DA14585/6和DA14531的应用程序标志

要从OTP引导,用户需要对两个应用程序标志进行编程(参见亚博国际官网平台网址图62)用“是”代替“否”。bootter通过读取OTP中作为应用程序标志的两个字来决定设备是处于开发模式还是正常模式,然后将OTP映像复制到RAM中。

. . / _images / application_programmed_flag.png

图62应用程序标记

15.3.OTP nvd

请注意

该工具适用于DA14580/581/583芯片家族。

OTP NVDS工具的功能与OTP报头的功能非常相似,允许用户读写NVDS内存块。通过编辑偏移文本字段,用户可以更改将要执行刻录和读取操作的地址。偏移量(以字节为单位)必须是0x0000和0x8000之间的十六进制数。对于刻录操作,偏移量应该使写入最后一个NVDS数据字节的地址小于OTP报头开始的地址。

OTP NVDS选项卡的示例如下:

. . / _images / otp_nvds_580_read_from_memory.png

图63OTP nvd

当按下刻写按钮时,验证参数NVDS_TAG_APP_BLE_ADV_DATA、NVDS_TAG_APP_BLE_SCAN_RESP_DATA和NVDS_TAG_DEVICE_NAME的长度分别等于参数ADV_DATA_TAG_LEN、SCAN_RESP_DATA_TAG_LEN和DEVICE_NAME_TAG_LEN所指示的值。如果验证测试失败,用户将收到通知,并可以选择继续进行刻录操作或取消该操作。与OTP报头类似,有整数类型和字符串类型字段。对于OTP NVDS,以下字段被视为字符串:

  • NVDS_TAG_APP_BLE_ADV_DATA
  • NVDS_TAG_APP_BLE_SCAN_RESP_DATA
  • NVDS_TAG_DEVICE_NAME
  • NVDS_TAG_BD_ADDRESS