亲爱的支持团队,
我正试图写一些东西进入OTP。
我正在使用函数“otp_write_words”来编写OTP。
我将一些数据写入了我的代码中的地址0x7f8fdf0,如以下步骤...
1.写0x00 0x00 0x00 0x00 0x00 0x00 0x00
2.读地址,得到0x00 0x00 0x00 0x00 0x00 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.阅读地址,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振荡器的修剪值”。
我应该写一些代码来读取它并设置值吗?
非常感谢。
嗨斯坦利_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_test.exe通过批处理文件来找到并把削减晶体有使用价值。
谢谢mt_dialog.
嗨mt_dialog,
嗯,即使我使用smartsnippet,我也无法在OTP中读取数据。也许我做错了什么。
我已经改为另一张电路板,它有用。我会遵守这个问题,谢谢。
我为没有明确的问题而道歉。
我的问题是,如果我使用plt(生产线工具,而不是刺破测试工具,我知道,它们是不同的,右?)要做一些校准,结果将写在OTP标题中,对吧?
使用PLT后,当设备启动时,ROM中的Bootloader将代码从Flash移动到SRAM和应用程序启动,该功能将从OTP读取数据并使用校准值?
在SDK中,我发现“read_otp_header()”函数将读取OTP,但只读取bd地址、IQ调整值和低功耗时钟源。
哪个函数将读取其他数据,例如XTAL16M的修剪值?
非常感谢。
嗨斯坦利_yeh,
生产线工具是用于批量生产的板子,prod_test工具是GU (Golden Unit)使用的fw,是的,在OTP头字段中有校准和烧毁修边值或晶体的功能。当设备准备好了(在你的情况中校准值计算并应用于OTP和弗兰克-威廉姆斯在flash)和靴子,校准值最初应用于晶体修剪登记,这种functionallity通过罗橄榄球员在启动执行,而不是通过SDK如果这就是你正在寻找的。
谢谢mt_dialog.
非常感谢。:)