通过写寄存器 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,由用户自行 *** 作。如下图:
最早的单片机里面是没有程序的,程序是在外置的程序存储器里面。现在大多数单片机都把程序区做在片内,做到真正的单片机。早期的单片机都是一次性写入(OTP)的,现在很多都是FLASH的,可以反复写的。最早的单片机是没有加密的,是可以直接读出来2进制的机器码,直接就可以写入另外一个单片机中。现在基本上都做了加密,正常的去读是读不出来的。
单片机:
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)