了解更多常见问题解答教程

7个帖子/ 0新
最后一篇
斯坦利_yeh.
离线
最后一次露面:1年8个月前
加入:2016-12-23 06:52
OTP无法读取

Dear support team,
我正试图写一些东西进入OTP。
我正在使用函数“otp_write_words”来编写OTP。
我将一些数据写入了我的代码中的地址0x7f8fdf0,如以下步骤...
1. Write 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01
2. Read the address, got 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 ==> correct
3.写入0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
4.阅读地址,GOT 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03 ==>正确,因为(0x01 | 0x02)= 0x03

However, I found that sometimes it is weird.
我把数据写入了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.阅读地址,GOT 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振荡器的修剪值”。
我应该写一些代码来读取它并设置值吗?

非常感谢。

关键词:
设备:
mt_dialog.
离线
最后一次露面:5小时37分钟前
员工
加入:2015-06-08 11:34
嗨斯坦利_yeh,

嗨斯坦利_yeh,

你确定这是代码在你描述的断言中最终结束的地方吗?如果您一直在读取和编写设备的相同地址,我会期望设备最终会在硬盘中而不是任何类型的断言。提供的OTP旨在仅写入一次并且没有写入,它具有提供错误检测的机制,并且在双误差位的情况下会导致硬盘驱动器,并且它提供了一个人可以纠正的机制OTP中的8个单词。所以总结一下,你有8个额外的单词最大备用,你可以纠正OTP的条目,之后你根本就不能。如果在条目存在错误中,则由OTP的逻辑检测到它们后,系统最终在硬故障中,由于OTP读取的错误,在AHB总线上生成错误。

谢谢mt_dialog.

斯坦利_yeh.
离线
最后一次露面:1年8个月前
加入:2016-12-23 06:52
嗨mt_dialog,

嗨mt_dialog,
Thanks for your response.
我确信代码最终在断言中。
如果我评论了断言,它将最终进入读取OTP(例如memcpy(&dev_bdaddr,(uint8_bdaddr,(uint8_t *)otp_hdr_bdaddr_backup_addr,sizeof(dev_bdaddr));)

对不起,一个问题,如果我使用产品线工具来编写一些数据,例如“XTAL16M振荡器的修剪值”。
我应该写一些代码来读取它并设置值吗?我找不到任何函数读取我的SDK中的值。

非常感谢你。

mt_dialog.
离线
最后一次露面:5小时37分钟前
员工
加入:2015-06-08 11:34
嗨斯坦利_yeh,

嗨斯坦利_yeh,

我试图复制你正在遇到的东西,并通过遵循你的指示,我无法强迫那个点被卡住的设备,发生的断言是因为在执行读取时,OTP不在待机模式下。设备,您可以通过内存窗口检查OTPC_Mode_REG的OTPC_Mode_Mode的值,并导致导致,也许是由于上一个命令。通常在执行hw_otpc_manual_read_on()之前,hw_otpc_init()函数在hw_otpc_mode_stby中设置设备。

I dont quite get the second question though, the prod test tool supports some commands, including the trimming of the Crystal commands (read, write, test, etc), the trimming of the crystal should be done during production, so you should be able to use the commands of the prod_test.exe through a batch file in order to find and burn the trimming value of the XTAL you have used.

谢谢mt_dialog.

斯坦利_yeh.
离线
最后一次露面:1年8个月前
加入:2016-12-23 06:52
嗨mt_dialog,

嗨mt_dialog,

嗯,即使我使用smartsnippet,我也无法在OTP中读取数据。也许我做错了什么。
我已经改为另一张电路板,它有用。我会遵守这个问题,谢谢。

我为没有明确的问题而道歉。
我的问题是,如果我使用plt(生产线工具,而不是刺破测试工具,我知道,它们是不同的,右?)要做一些校准,结果将写在OTP标题中,对吧?
使用PLT后,当设备启动时,ROM中的Bootloader将代码从Flash移动到SRAM和应用程序启动,该功能将从OTP读取数据并使用校准值?
In SDK, I just find the "read_otp_header()" function will read OTP, but just read bd address, IQ trim values and low power clock source.
哪个函数将读取其他数据,例如XTAL16M的修剪值?
非常感谢。

mt_dialog.
离线
最后一次露面:5小时37分钟前
员工
加入:2015-06-08 11:34
嗨斯坦利_yeh,

嗨斯坦利_yeh,

生产线工具所用的板mass production, the prod_test tool is the fw that is used by the GU (Golden Unit) and yes there is the functionallity to calibrate and burn the trimming value or the crystal in the OTP Header field. When the device is ready to go (in your case calibration value calculated and applied in OTP and fw in the flash) and boots up, the calibration value initially is applied to the XTAL trim register, this kind of functionallity is performed via ROM booter upon start up and not via the SDK if that is what you are looking for.

谢谢mt_dialog.

斯坦利_yeh.
离线
最后一次露面:1年8个月前
加入:2016-12-23 06:52
好的,我明白了,谢谢

非常感谢。:)