这是一个几乎没人探索的地方啊.就是STM32的OTP.而且OTP是不支持擦除,支持按BIT编程,区别于FLASH.
OTP = One-time programmable bytes
但是实际上也不是1一次性的,只能从1写成0,不能从0写成1.每个bit都是独立的.编程OTP也很简单,但是暂时好像不能通过HAL库什么的.
- #define FLASH_PSIZE_BYTE ((uint32_t)0x00000000U)
- #define CR_PSIZE_MASK ((uint32_t)0xFFFFFCFFU)
-
- void OTP_Test(void)
- {
- /* Unlock Flash */
- FLASH->KEYR = 0x45670123U;
- FLASH->KEYR = 0xCDEF89ABU;
-
- /* If the previous operation is completed, proceed to program the new data */
- FLASH->CR &= CR_PSIZE_MASK;
- FLASH->CR |= FLASH_PSIZE_BYTE;
- FLASH->CR |= FLASH_CR_PG;
-
- *(__IO uint8_t *)0x1FF0F000 = 0xFF;
-
- /* Data synchronous Barrier (DSB) Just after the write operation
- This will force the CPU to respect the sequence of instruction (no optimization).*/
- __DSB();
-
- /* Lock Flash */
-
- FLASH->CR |= FLASH_CR_LOCK;
- }
比如以上程序就是写0x1FF0F000到0xFF,等于没写哈,因为我之前已经操作过OTP了,所以第一第二个Byte就不能操作了.
比如我现在给第二字节写0xEF,如图.就是BIT4为0.
确实编程为0xEF了.
如果他真的只能编程一次,那么我现在写成F7应该是不行的吧.验证.
变成了0xE7,既不是F7也不是EF.
看计算器结果.
每一BIT独立OTP,只能为写0不能写1!
本帖最后由 cl17726 于 2017-5-23 09:15 编辑