OTP操作的大概样子
OTP寄存器和FLASH数据区域很类似,1能被改写为0,但0永远也不能写成1.如果有一个32位的OTP寄存器,出产的值是0xFFFFFFFF,如果用户通过编程,将OTP寄存器的值写为0xFFFFFFFE后,那OTP寄存器再也不能在改写为0xFFFFFFFF了;当然,这个OTP寄存器的值还可以改写为0xFFFFFFFC或其它。
(不知道这里是否难理解,我再啰嗦一下,这里就是只修改了最后一个位,其他的都还是保持原始的状态还没有修改,那我当然还可以再修改一次。)
为了给OTP寄存器提供保护,一般这类FLASH芯片还会提供一个LOCK寄存器。LOCK寄存器(同属OTP)也只能烧写一次。LOCK寄存器的每一位对应于一个OTP寄存器。
(套娃,就是告诉你这如果部分flash的数据很重要,所以我要保护好它,我用了OTP。然后我还得保护好操作OTP的寄存器,那我就把操作它的的也保护好,所以LOCK就是拿来保护好OTP寄存器的)
如果与OTP寄存器对应LOCK寄存器的位(BIT)从1写为0,就意味着这个被锁住的OTP寄存器再也不能进行写操作了。即使OTP的当前值为0XFFFFFFFF,它的值也永远不可以被改写了。
通过OTP寄存器与LOCK寄存器,用户可以在OTP里保存一些特定的信息,例如软件版本号,硬件版本号,秘钥等信息。(这不就实例化了它的作用,你还能想到什么?)
同时,这类FLASH芯片内部还会有另外一个OTP寄存器,这个寄存器在出产的时候就被厂家编程过了,写入特定的序列号,并LOCK住。
如果有需要,FLASH厂商也可以根据客户的需要写入特定的序列号。这样,每个芯片都会有一个不一样的ID号,避免被复制。
除了FLASH芯片,很多CPU厂商,也在CPU内部提供类似的OTP寄存器,供用户使用,利于开发更安全的应用。
象一些比较大的厂商,例如TI,FREESCALE等,他们往往是不公开某些芯片的数据手册的。如果要获得他们的数据手册,一是要有大量的订货,同时也需要签署一定的保密协议。
OTP本身并不能提供绝对安全的应用。但OTP的提供,有利于开发商开发和部署更安全的应用,保护自己和客户的利益。
象很多大的厂商,例如NOKIA,MOTOROAL,SAMSUNG和SONYERRICSON等,都需要根据客户(运营商)的要求,开发一些只能在自己的网络里使用的手机。其中很多软件和硬件的保护都是基于OTP来实现的。
OTP的解密
对于OTP芯片根据其存储器的特点,简单的方法就是想办法把密码去掉,因为OTP形式存储不能用电擦除,但是可以用紫外光来擦除,那么只要能控制好了只把密码部分擦除掉,而保留了程序段,那么这样的芯片就是不加密的了。
如果这样还没有办法,那么如果把芯片经过去层处理,把存储器进行拍照,因为代码是以电荷的码点形式存在的,然后把照片经过染色处理,把1和0区分读出整理,这样就得到了存储器里的代码。 解密的方法和手段很多,以上只是简单的提了一下思路。
全部0条评论
快来发表一下你的评论吧 !