一种spiflash加密接口及加密数据的读写方法

文档序号:8339535阅读:1199来源:国知局
一种spi flash加密接口及加密数据的读写方法
【技术领域】
[0001]本发明属于电子芯片技术领域,涉及一种电子芯片的加密设备及方法,尤其是一种针对SPI FLASH的加密接口及读写方法;采用该加密接口及读写方法,能够实现对SPIFLASH的按字节读写,以及按字节加密,提高了系统访问SPI FLASH的效率。
【背景技术】
[0002]在一个加密主控芯片系统中,通常需要将启动程序部分的数据置于跟主控芯片一体封装的SPI NORFLASH中,以提高系统的安全系数。上述启动程序的数据在写入SPI FLASH之前必然需要对其进行加密处理,所以当读出上述数据后必然要进行反向的解密操作才能得到真实的数据。
[0003]现有技术中的加密算法,是针对整个字进行的加密运算,使得加密后的数据与其存储地址以及同一字内的位于不同字节的位有相关性。虽然SPI FLASH的接口标准支持按字节写的命令,但是采用上述按字加密的方式使得同一字内的不同字节之间产生依赖关系,丧失了按字节写的灵活性。
[0004]此外,由于FLASH的操作特性是先擦后写,而且擦除单位通常为一个扇区,如果只能按字写入的话,软件在要写入一个字节之前首先要判断该字节所在的字的所有字节是否有数据,如果没有数据可以直接写该字,如果任何一个字节有数据,都需要先将该字所在的扇区读出到缓存,将需要写的相应字节位置替换成新字节,然后进行擦除操作,然后再按照需要将整个扇区重新写入FLASH。该种方式不仅降低系统效率而且对软件有极高的要求,使得对SPI FLASH按字节写入加密数据的操作成本提高。此为现有技术的不足之处。
[0005]因此,提供设计一种新型的针对SPI FLASH的加密接口及读写方法,以提高系统访问SPI FLASH的效率是非常有必要的。

【发明内容】

[0006]本发明的目的在于,针对上述现有技术中存在的缺陷,提供设计一种针对SPIFLASH的加密接口及读写方法,以解决上述技术问题,在保持算法复杂度的同时,减少软件工作量,并提高系统访问SPI FLASH的效率。
[0007]为实现上述目的,本发明给出以下技术方案:
一种SPI FLASH加密接口,包括命令模块、数据模块、加密模块、解密模块、状态机模块以及协议转换模块;其特征在于:
所述命令模块与系统总线相连,用于寄存来自系统总线的地址、读写信息、数据块大小及传输类型,并将系统总线的读写需求传递至数据模块和状态机模块,将状态机模块的当前操作状态反馈至系统总线;
所述数据模块与系统总线、命令模块、加密模块以及解密模块相连,数据模块用于寄存系统总线要写入SPI FLASH的字节数据以及从SPI FLASH中读取的字节数据;
所述加密模块与数据模块、命令模块以及状态机模块相连,用于将写入SPI FLASH的字节数据按照特定的加密算法转换成密文;
所述解密模块与数据模块、状态机模块相连,用于将从FLASH内读出的字节数据按照特定的解密算法转换成明文;
所述状态机模块与命令模块、加密模块、解密模块以及协议转换模块相连,用于解析来自命令模块的数据,以实现对SPI FLASH读写擦状态的转换控制,并反馈FLASH的状态信息至命令模块;
所述协议转换模块与状态机模块、SPI FLASH相连,实现SPI协议转换,即将命令和数据按照SPI协议组成相应的串行命令序列格式转送至片外的SPI FLASH,或者将从SPIFLASH串行读入的数据寄存重新组成字节或者字的数据格式。
[0008]优选地,所述数据模块内设置有读数据缓存单元和写数据缓存单元。
[0009]一种SPI FLASH加密数据的写入方法,包括如下步骤:
S1:系统总线将写命令发送至命令模块,将字节写数据发送至数据模块;
S2:命令模块接收到写命令后,判断写命令中的地址是否在数据模块的写数据缓存单元中命中,如果命中,则将缓存数据更新,并转到S7,否则转到S3 ;
53:命令模块将写命令传递至状态机模块,状态机模块对写命令进行状态转换;
54:通过加密模块对数据模块中的字节写数据进行加密处理;
55:将写命令以及经加密模块加密处理后的字节写数据依次传递至协议转换模块;
56:协议转换模块按顺序将命令序列输出至SPI FLASH内;
57:完成本次写操作。
[0010]优选地,所述步骤S4中包括如下步骤:
5401:对字节O的加密算法,如下:
wr_data_enc[O] = wr_data[0] ~ wr_data[2] ~ wr_addr[2];wr_data_enc[I] = wr_data[l] ~ wr_data[3] ~ wr_addr[3];wr_data_enc[2] = wr_data[2] ~ wr_data[5] ~ wr_addr[4];wr_data_enc[3] = wr_data[3] ~ wr_data[6] ~ wr_addr[5];wr_data_enc[4] = wr_data[4] ~ wr_data[7] ~ wr_addr[6];wr_data_enc[5] =~wr_data[5] ~ wr_addr[7];wr_data_enc[6] = wr_data[6] ~ wr_data[0] ~ wr_addr[8];wr_data_enc[7] = wr_data[7] ~ wr_data[l] ~ wr_addr[9];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
[0011 ] 优选地,所述步骤S4还包括如下步骤:
5402:对字节I的加密算法,如下:
wr_data_enc[8] = wr_data[ 8] ~ wr_data[8+6] ~ wr_addr[9]; wr_data_enc[9] = wr_data[ 9] ~ wr_data[8+7] ~ wr_addr[8]; wr_data_enc[10] = wr_data[10] ~ wr_data[8+0] ~ wr_addr[7]; wr_data_enc[11] =~wr_data[ll] ~ wr_addr[6]; wr_data_enc[12] = wr_data[12] ~ wr_data[8+l] ~ wr_addr[5]; wr_data_enc[13] = wr_data[13] ~ wr_data[8+3] ~ wr_addr[4];wr_data_enc[14] = wr_data[14] ~ wr_data[8+4] ~ wr_addr[3];wr_data_enc[15] = wr_data[15] ~ wr_data[8+5] ~ wr_addr[2];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
[0012]优选地,所述步骤S4还包括如下步骤:
5403:对字节2的加密算法,如下:
wr_data_enc[16] = wr_data[16] ~ wr_data[16+3] ~ wr_addr[2];wr_data_enc[17] = wr_data[17] ~ wr_data[16+4] ~ wr_addr[4];wr_data_enc[18] = wr_data[18] ~ wr_data[16+6] ~ wr_addr[3];wr_data_enc[19] = wr_data[19] ~ wr_data[16+7] ~ wr_addr[9];wr_data_enc[20] = wr_data[20] ~ wr_data[16+0] ~ wr_addr[7];wr_data_enc[21] = wr_data[21] ~ wr_data[16+l] ~ wr_addr[8];wr_data_enc[22] =~wr_data[22] ~ wr_addr[5];wr_data_enc[23] = wr_data[23] ~ wr_data[16+2] ~ wr_addr[6];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
[0013]优选地,所述步骤S4还包括如下步骤:
5404:对字节3的加密算法,如下:
wr_data_enc[24] = wr_data[24] ~ wr_data[24+5] ~ wr_addr[5];wr_data_enc[25] = wr_data[25] ~ wr_data[24+7] ~ wr_addr[9];wr_data_enc[26] = wr_data[26] ~ wr_data[24+6] ~ wr_addr[7];wr_data_enc[27] = wr_data[27] ~ wr_data[24+l] ~ wr_addr[2];wr_data_enc[28] = wr_data[28] ~ wr_data[24+2] ~ wr_addr[3];wr_data_enc[29] = wr_data[29] ~ wr_data[24+3] ~ wr_addr[8];wr_data_enc[30] =~wr_data[30] ~ wr_addr[6];wr_data_enc[31] = wr_data[31] ~ wr_data[24+4] ~ wr_addr[4];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
[0014]一种SPI FLASH加密数据的读取方法,包括如下步骤:
S1:系统总线发送读命令至命令模块,并等待数据模块反馈读数据;
S2:命令模块判断读命令中的地址是否在数据模块的读数据缓存单元中命中,如果命中,则直接将字节数据反馈给总线,并转到步骤S10,否则转到步骤S3 ;
53:向系统总线反馈等待信号;
54:将读命令传递至状态机模块,通过状态机模块进行状态转换,将读命令解析后传递至协议转换模块;
55:协议转换模块按照顺序将读命令序列输出至SPI FLASH ;
56:SPI FLASH接到读命令序列后,将字节数据序列发送至协议转换模块;
57:协议转换模块将字节数据序列转成芯片内部的数据格式并反馈至状态机模块;
58:状态机模块进行状态转换后将该字节数据传递至解密模块; S9:解密模块通过解密算法对字节数据进行解密,然后将解密后的字节数据经数据模块反馈至系统总线;
SlO:完成本次读操作。
[0015]优选地,所述步骤S9中包括如下步骤:
5901:对字节O的解密算法:
rd—data—dec[O] = rd_data[0] " rd—data—dec[2] " rd_addr[2];rd—data—dec[I] = rd—data[l] " rd—data—dec[3] " rd_addr[3];rd—data—dec[2] = rd—data[2] " rd—data—dec[5] " rd_addr[4];rd—data—de
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1