完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 一只耳朵怪 于 2018-6-14 10:29 编辑
C2000系列都有一块1Kx16的OTP存储,顾名思义只能编程一次。 对FLASH编程的时候只能从1编程到0,同一个地址,可以先编程0xFF00,然后再编程0x0000,想要变回0xFFFF就需要擦除操作。 看了下OTP的介绍,能否将OTP理解成一块不能擦除的FLASH? 如果可以理解成为一块不能擦除的FLASH,那么会有以下特性: 1)可以使用FLASH_API来操作OTP(擦除除外) 2)OTP可以多次编程,同一个地址可以先编程0xFF00,然后再编程0x0000,其余地址以此类推,直到所有地址都变为0x0000为止 还有一种理解就是,编程必须整个1Kx16内容全部为0xFFFF,编程任意一个地址以后, 整个OTP都不能再写入。 哪一种理解是正确的呢? |
|
相关推荐
10个回答
|
|
OTP是一次编程,也就是对每个位bit来说,只能单向的从1变成0,无法擦除成1;因此你可以多次调用Flash API对该区域进行操作,但相应的位只能从1变成0,当所有为全变成0了,就不能进行编程了。
|
|
|
|
广陵云峰 发表于 2018-6-14 06:54 说的对,不过otp api好像没有? 提供德州仪器蓝牙和射频cc2540,cc2541,cc26系列,cc13系列脱机烧录工具。 |
|
|
|
不是OTP API,同样用Flash API的。 The flash array and One Time Programmable (OTP) block on the device are managed via CPU execution of algorithms in the Flash API library. |
|
|
|
广陵云峰 发表于 2018-6-14 06:54 如果这样的话,就可以理解成一块不能擦除的FLASH吧? 名字 One-Time Program有一定误导性,实际上OTP是可以多次编程的,只不过不能擦除而已。 由于C2000没有内部的唯一 ID,我本来相在OTP写入一个UUID作为器件的唯一ID,希望这个ID写入一次就不能修改了,现在看实际上还是可以修改的。 |
|
|
|
王伟01 发表于 2018-6-14 07:34 你把onetime编程看着针对bit理解就OK了。 |
|
|
|
你的理解还是比较深刻的,C2000的OTP是一块不能擦除的FLASH,可以多次编程,使用FlashAPI,所以第二种理解完全正确。
If a post answers your question, please mark it with the "verify answer" button. |
|
|
|
szbliy 发表于 2018-6-14 08:05 对于FLASH来说,对于同一个地址,不经过擦除直接多次编程设计可以增加灵活性,我在软件中也利用了FLASH的这个特性。写入错了大不了擦除就是了。 但是对于芯片内部的OTP来说,这样设计是很不合理的。从应用角度举几个例子: 1)OTP中写入一段代码,如果再次写入修改了某些位,写入的这段代码就彻底废掉了,对应OTP不能擦除,代码又不能用,等于废掉。 2)在OTP中写入唯一数据,比如我这次的应用场合,写入一个uuid作为芯片序列号,设计本意是写入就不能修改的,但是实际上写入后OTP仍然可以继续修改,直到所有地址都是0x0000 目前我写入uuid的操作是C2000内部代码实现的,写入uuid之前我会检查整个OTP是否全部为0xFFFF,尽量保证不会重复写入OTP,软件级这样做是不可靠的,别人写一段代码依然可以修改OTP,在器件级保证整个OTP全部为0xFFFF才能写入才是最可靠的。 |
|
|
|
王伟01 发表于 2018-6-14 08:15 非常感谢你的反馈,从你的应用角度来看,这样的设计确实会带来些不方便。 只是C2000产品设计这个OTP本来主要是希望提供一个存储固定数据或固定程序的小区间,因此并没有考虑后续还会去重新写入的问题。 实际上由于OTP的操作也需要调用FlashAPI,再次写入或误操作的可能性应该是较低的,而用户主动去操作它,必然是在应用程序中可控地对它进行处理。 有的用户可能需要可以多次写入的功能,而你提到的恰恰相反,所以可能根本上这本身就不是一个好的解决方案,只能用户从自己需要的角度去灵活使用它吧。 If a post answers your question, please mark it with the "verify answer" button. |
|
|
|
王伟01 发表于 2018-6-14 08:15 提供一个参考办法, 你可以把需要一次写入的编号,比如唯一号码,UUID,MAC等用原码和反码写进TOP的存储器。读取后,用原码和反码进行异或运算,结果为全FF就判断为正确,非全F就说明有二次改写。 这样可以最大限度确保你的编码不出问题。出了问题也可以及时发现。 :-) |
|
|
|
pingfandeshijie 发表于 2018-6-14 08:38 加16位的CRC校验就可以了。实际中eeprom中存储数据经常这么用。 |
|
|
|
只有小组成员才能发言,加入小组>>
334 浏览 1 评论
528 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
773 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
649 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1126 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
55浏览 29评论
116浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
250浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
199浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
54浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 14:07 , Processed in 1.047375 second(s), Total 93, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号