旺宏norFlash Security Register OTP空间读写

以旺宏NorFlash芯片MX25l12835F为例。

通过写寄存器B1h进入OTP模式,写C1h退出OTP模式

命令集:
06h - Write Enable

04h - Write Disable

05h - Read Status Register

01h - Write Status Register

03h - Read Data Bytes

0Bh - Data Fast Read

02h - Page Program(Page Write)

D8h - Block Erase

C7h - Chip Erase

2Bh- Read Security Register

2Fh- Write Security Register

Step1

先通过写B1h进入OTP模式,并写06h打开写使能

Step2

由于OTP是个独立的空间,所以4K bit的空间地址还是从 000000h~ 0001FFh

(1)读操作

(a)以1Byte为单位,可以读小于512Byte(4Kbit == 512Byte)的任意长度。
(b)以读取整个OTP空间为例,起始地址为000000h,读的地址数据格式如下:
__u8 sdata[4] ;

                   sdata[0] = 0x03;	//读指令

                    sdata[1] = 0x00; //地址的16~23位

                    sdata[2] = 0x00;//地址的8~15位

                    sdata[3] = 0x00;//地址的0~7位

                    再用你读RDID的那个接口下读

                    spi_xfer.tx_addr = sdata;

                    spi_xfer.tx_count = 4;

                    spi_xfer.rx_addr = rDataBuff;

                    spi_xfer.rx_count = 512;
(2)写操作

(a)写是以一个page即256Byte为单位,所以4K的空间要分2次写才能写完;
(b)假设加密数据存在enBuffer[512]中,要将enBuffer的数据写到OTP中,要分2次写,操作如下:
__u8 sdata[260] ; //这里的数组大小是260 = 4字节地址+256字节数据;

                   sdata[0] = 0x02;	//页写指令

                    sdata[1] = 0x00; //地址的16~23位

                    sdata[2] = 0x00;//地址的8~15位

                    sdata[3] = 0x00;//地址的0~7位    

 eLIBs_memcpy((void*)(sdata+4), enBuffer, 256);//4为地址长度的偏移量,256是一次写的最大值,也可以根据实际数据的大小来填,但不能超过256;       

                    spi_xfer.tx_addr = sdata;

                    spi_xfer.tx_count = 4+256;

                    spi_xfer.rx_addr = 0;

                    spi_xfer.rx_count = 0;

Step3

通过写C1h退出OTP模式;进入OTP后,一定要退出,不然正常的数据区不能操作

Step4

通过写2Fh寄存器可以锁死OTP

注意,这个操作是不可逆的; 一但写了2F后,OTP区域将只能读,不能再对其进行写操作。



通过读2Bh寄存器的bit0位,若bit0为1说明厂商出厂时已经锁死Security OTP,则Flash的电子串号ESN是默认写在OTP的前16字节, 直接进入OTP模式,从000000h读取16Byte长度即可得到;bit0为0说明厂商没有锁死Security OTP,由用户自行操作。如下图:

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值