亲爱的支持团队,
我正试图写一些东西进入OTP。
我正在使用函数“otp_write_words”来编写OTP。
我将一些数据写入代码中的地址0x7F8FDF0,步骤如下。。。
1写入0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01
2读取地址,得到0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01==>正确
3.写入0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
4.阅读地址,GOT 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03 ==>正确,因为(0x01 | 0x02)= 0x03
然而,我发现有时候很奇怪。
我把数据写入了OTP,但阅读后,它变成0x00。我写了0x00的一些字节,但它变成了0x80。
1.写0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x11
2.阅读地址,GOT 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x11 ==>正确
3.写入0x00 0x00 0x00 0x00 0x00 0x00 0x22 0x00
4读取地址,得到0x00 0x00 0x00 0x00 0x00 0x80 0x22 0x00==>不正确,应该是0x22 0x11,一个字节变成0x80??
为什么?我不知道。
在回读和写完之后,我无法从OTP阅读任何内容。
我追溯了代码,我发现它被困在“assert_warning_otpc_mode(hw_otpc_mode_stby);”“hw_otpc_manual_read_on”函数。
我该如何恢复?
顺便说一下,我使用产品线工具为一些数据写一些数据,例如“XTAL16M振荡器的修剪值”。
我应该写一些代码来读取它并设置值吗?
非常感谢。

嗨斯坦利_yeh,
你确定这是代码在你描述的断言中最终结束的地方吗?如果您一直在读取和编写设备的相同地址,我会期望设备最终会在硬盘中而不是任何类型的断言。提供的OTP旨在仅写入一次并且没有写入,它具有提供错误检测的机制,并且在双误差位的情况下会导致硬盘驱动器,并且它提供了一个人可以纠正的机制OTP中的8个单词。所以总结一下,你有8个额外的单词最大备用,你可以纠正OTP的条目,之后你根本就不能。如果在条目存在错误中,则由OTP的逻辑检测到它们后,系统最终在硬故障中,由于OTP读取的错误,在AHB总线上生成错误。
谢谢mt_dialog.
嗨mt_dialog,
谢谢你的回复。
我确信代码最终在断言中。
如果我评论了断言,它将最终进入读取OTP(例如memcpy(&dev_bdaddr,(uint8_bdaddr,(uint8_t *)otp_hdr_bdaddr_backup_addr,sizeof(dev_bdaddr));)
对不起,一个问题,如果我使用产品线工具来编写一些数据,例如“XTAL16M振荡器的修剪值”。
我应该写一些代码来读取它并设置值吗?我找不到任何函数读取我的SDK中的值。
非常感谢你。
嗨斯坦利_yeh,
我试图复制你正在遇到的东西,并通过遵循你的指示,我无法强迫那个点被卡住的设备,发生的断言是因为在执行读取时,OTP不在待机模式下。设备,您可以通过内存窗口检查OTPC_Mode_REG的OTPC_Mode_Mode的值,并导致导致,也许是由于上一个命令。通常在执行hw_otpc_manual_read_on()之前,hw_otpc_init()函数在hw_otpc_mode_stby中设置设备。
虽然我不太明白第二个问题,prod测试工具支持一些命令,包括水晶的修剪命令(读、写、测试等),水晶的修剪应该在生产过程中完成,因此,您应该能够通过批处理文件使用prod\u test.exe的命令,以便找到并烧录您使用的XTAL的微调值。
谢谢mt_dialog.
嗨mt_dialog,
嗯,即使我使用smartsnippet,我也无法在OTP中读取数据。也许我做错了什么。
我已经改为另一张电路板,它有用。我会遵守这个问题,谢谢。
我为没有明确的问题而道歉。
我的问题是,如果我使用plt(生产线工具,而不是刺破测试工具,我知道,它们是不同的,右?)要做一些校准,结果将写在OTP标题中,对吧?
使用PLT后,当设备启动时,ROM中的Bootloader将代码从Flash移动到SRAM和应用程序启动,该功能将从OTP读取数据并使用校准值?
在SDK中,我只发现“read\u otp\u header()”函数会读取otp,但只读取bd地址、IQ微调值和低功耗时钟源。
哪个函数将读取其他数据,例如XTAL16M的修剪值?
非常感谢。
嗨斯坦利_yeh,
生产线工具是用于批量生产的板,prod_测试工具是由GU(黄金单位)使用的fw,是的,在OTP头字段中有校准和烧录微调值或晶体的功能。当设备准备就绪(在您的情况下,校准值计算并应用于OTP和fw中的闪存)并启动时,校准值最初应用于XTAL微调寄存器,这种功能在启动时通过ROM引导程序执行,而不是通过SDK执行(如果您正在寻找的话)。
谢谢mt_dialog.
非常感谢。:)