一种SPI FLASH加密接口及加密数据的读写方法技术

技术编号:11515857 阅读:402 留言:0更新日期:2015-05-28 10:48
本发明专利技术涉及一种SPI FLASH加密接口,包括命令模块、数据模块、加密模块、解密模块、状态机模块以及协议转换模块,命令模块与系统总线相连;数据模块与系统总线、命令模块、加密模块以及解密模块相连;加密模块与数据模块、命令模块以及状态机模块相连;解密模块与数据模块、状态机模块相连;状态机模块与命令模块、加密模块、解密模块以及协议转换模块相连;协议转换模块与状态机模块、SPI FLASH相连。将传统的按字加密方式改成按字节采用不同算法分别加密的方式,取消了字节间的加解密依赖关系,使得软件对SPI FLASH的操作大为简化,在保证系统保密安全的基础上有效降低了软件操作的复杂度,提升了整个系统的效率。

【技术实现步骤摘要】
一种SPIFLASH加密接口及加密数据的读写方法
本专利技术属于电子芯片
,涉及一种电子芯片的加密设备及方法,尤其是一种针对SPIFLASH的加密接口及读写方法;采用该加密接口及读写方法,能够实现对SPIFLASH的按字节读写,以及按字节加密,提高了系统访问SPIFLASH的效率。
技术介绍
在一个加密主控芯片系统中,通常需要将启动程序部分的数据置于跟主控芯片一体封装的SPINORFLASH中,以提高系统的安全系数。上述启动程序的数据在写入SPIFLASH之前必然需要对其进行加密处理,所以当读出上述数据后必然要进行反向的解密操作才能得到真实的数据。现有技术中的加密算法,是针对整个字进行的加密运算,使得加密后的数据与其存储地址以及同一字内的位于不同字节的位有相关性。虽然SPIFLASH的接口标准支持按字节写的命令,但是采用上述按字加密的方式使得同一字内的不同字节之间产生依赖关系,丧失了按字节写的灵活性。此外,由于FLASH的操作特性是先擦后写,而且擦除单位通常为一个扇区,如果只能按字写入的话,软件在要写入一个字节之前首先要判断该字节所在的字的所有字节是否有数据,如果没有数据可以直接写该字,如果任何一个字节有数据,都需要先将该字所在的扇区读出到缓存,将需要写的相应字节位置替换成新字节,然后进行擦除操作,然后再按照需要将整个扇区重新写入FLASH。该种方式不仅降低系统效率而且对软件有极高的要求,使得对SPIFLASH按字节写入加密数据的操作成本提高。此为现有技术的不足之处。因此,提供设计一种新型的针对SPIFLASH的加密接口及读写方法,以提高系统访问SPIFLASH的效率是非常有必要的。
技术实现思路
本专利技术的目的在于,针对上述现有技术中存在的缺陷,提供设计一种针对SPIFLASH的加密接口及读写方法,以解决上述技术问题,在保持算法复杂度的同时,减少软件工作量,并提高系统访问SPIFLASH的效率。为实现上述目的,本专利技术给出以下技术方案:一种SPIFLASH加密接口,包括命令模块、数据模块、加密模块、解密模块、状态机模块以及协议转换模块;其特征在于:所述命令模块与系统总线相连,用于寄存来自系统总线的地址、读写信息、数据块大小及传输类型,并将系统总线的读写需求传递至数据模块和状态机模块,将状态机模块的当前操作状态反馈至系统总线;所述数据模块与系统总线、命令模块、加密模块以及解密模块相连,数据模块用于寄存系统总线要写入SPIFLASH的字节数据以及从SPIFLASH中读取的字节数据;所述加密模块与数据模块、命令模块以及状态机模块相连,用于将写入SPIFLASH的字节数据按照特定的加密算法转换成密文;所述解密模块与数据模块、状态机模块相连,用于将从FLASH内读出的字节数据按照特定的解密算法转换成明文;所述状态机模块与命令模块、加密模块、解密模块以及协议转换模块相连,用于解析来自命令模块的数据,以实现对SPIFLASH读写擦状态的转换控制,并反馈FLASH的状态信息至命令模块;所述协议转换模块与状态机模块、SPIFLASH相连,实现SPI协议转换,即将命令和数据按照SPI协议组成相应的串行命令序列格式转送至片外的SPIFLASH,或者将从SPIFLASH串行读入的数据寄存重新组成字节或者字的数据格式。优选地,所述数据模块内设置有读数据缓存单元和写数据缓存单元。一种SPIFLASH加密数据的写入方法,包括如下步骤:S1:系统总线将写命令发送至命令模块,将字节写数据发送至数据模块;S2:命令模块接收到写命令后,判断写命令中的地址是否在数据模块的写数据缓存单元中命中,如果命中,则将缓存数据更新,并转到S7,否则转到S3;S3:命令模块将写命令传递至状态机模块,状态机模块对写命令进行状态转换;S4:通过加密模块对数据模块中的字节写数据进行加密处理;S5:将写命令以及经加密模块加密处理后的字节写数据依次传递至协议转换模块;S6:协议转换模块按顺序将命令序列输出至SPIFLASH内;S7:完成本次写操作。优选地,所述步骤S4中包括如下步骤:S401:对字节0的加密算法,如下:wr_data_enc[0]=wr_data[0]^wr_data[2]^wr_addr[2];wr_data_enc[1]=wr_data[1]^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[1]^wr_addr[9];其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSIFLASH的地址。优选地,所述步骤S4还包括如下步骤:S402:对字节1的加密算法,如下: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[11]^wr_addr[6];wr_data_enc[12]=wr_data[12]^wr_data[8+1]^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表示系统总线将数据要写入PSIFLASH的地址。优选地,所述步骤S4还包括如下步骤:S403:对字节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+1]^本文档来自技高网
...
一种<a href="http://www.xjishu.com/zhuanli/55/CN104657288.html" title="一种SPI FLASH加密接口及加密数据的读写方法原文来自X技术">SPI FLASH加密接口及加密数据的读写方法</a>

【技术保护点】
一种SPI FLASH加密接口,包括命令模块、数据模块、加密模块、解密模块、状态机模块以及协议转换模块;其特征在于:所述命令模块与系统总线相连,用于寄存来自系统总线的地址、读写信息、数据块大小及传输类型,并将系统总线的读写需求传递至数据模块和状态机模块,将状态机模块的当前操作状态反馈至系统总线;所述数据模块与系统总线、命令模块、加密模块以及解密模块相连,数据模块用于寄存系统总线要写入SPI FLASH的字节数据以及从SPI FLASH中读取的字节数据;所述加密模块与数据模块、命令模块以及状态机模块相连,用于将写入SPI FLASH的字节数据按照特定的加密算法转换成密文;所述解密模块与数据模块、状态机模块相连,用于将从FLASH内读出的字节数据按照特定的解密算法转换成明文;所述状态机模块与命令模块、加密模块、解密模块以及协议转换模块相连,用于解析来自命令模块的数据,以实现对SPI FLASH读写擦状态的转换控制,并反馈FLASH的状态信息至命令模块;所述协议转换模块与状态机模块、SPI FLASH相连,实现SPI协议转换,即将命令和数据按照SPI协议组成相应的串行命令序列格式转送至片外的SPI FLASH,或者将从SPI FLASH串行读入的数据寄存重新组成字节或者字的数据格式。...

【技术特征摘要】
1.一种SPIFLASH加密接口,包括命令模块、数据模块、加密模块、解密模块、状态机模块以及协议转换模块;其特征在于:所述命令模块与系统总线相连,用于寄存来自系统总线的地址、读写信息、数据块大小及传输类型,并将系统总线的读写需求传递至数据模块和状态机模块,将状态机模块的当前操作状态反馈至系统总线;所述数据模块与系统总线、命令模块、加密模块以及解密模块相连,数据模块用于寄存系统总线要写入SPIFLASH的字节数据以及从SPIFLASH中读取的字节数据;所述加密模块与数据模块、命令模块以及状态机模块相连,用于将写入SPIFLASH的字节数据按照特定的加密算法转换成密文;所述解密模块与数据模块、状态机模块相连,用于将从FLASH内读出的字节数据按照特定的解密算法转换成明文;所述状态机模块与命令模块、加密模块、解密模块以及协议转换模块相连,用于解析来自命令模块的数据,以实现对SPIFLASH读写擦状态的转换控制,并反馈FLASH的状态信息至命令模块;所述协议转换模块与状态机模块、SPIFLASH相连,实现SPI协议转换,即将命令和数据按照SPI协议组成相应的串行命令序列格式转送至片外的SPIFLASH,或者将从SPIFLASH串行读入的数据寄存重新组成字节或者字的数据格式;所述特定的加密算法包括以下具体算法:对字节0的加密算法,如下:wr_data_enc[0]=wr_data[0]^wr_data[2]^wr_addr[2];wr_data_enc[1]=wr_data[1]^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[1]^wr_addr[9];其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSIFLASH的地址;对字节1的加密算法,如下: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[11]^wr_addr[6];wr_data_enc[12]=wr_data[12]^wr_data[8+1]^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表示系统总线将数据要写入PSIFLASH的地址;对字节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+1]^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表示系统总线将数据要写入PSIFLASH的地址;对字节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+1]^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表示系统总线将数据要写入PSIFLASH的地址;所述特定的解密算法包括以下具体算法:对字节0的解密算法:rd_data_dec[0]=rd_data[0]^rd_data_dec[2]^rd_addr[2];rd_data_dec[1]=rd_data[1]^rd_data_dec[3]^rd_addr[3];rd_data_dec[2]=rd_data[2]^rd_data_dec[5]^rd_addr[4];rd_data_dec[3]=rd_data[3]^rd_data_dec[6]^rd_addr[5];rd_data_dec[4]=rd_data[4]^rd_data_dec[7]^rd_addr[6];rd_data_dec[5]=~rd_data[5]^rd_addr[7];rd_data_dec[6]=rd_data[6]^rd_data_dec[0]^rd_addr[8];rd_data_dec[7]=rd_data[7]^rd_data_dec[1]^rd_addr[9];对字节1的解密算法:rd_data_dec[8]=rd_data[8]^rd_data_dec[8+6]^rd_addr[9];rd_data_dec[9]=rd_data[9]^rd_data_dec[8+7]^rd_addr[8];rd_data_dec[10]=rd_data[10]^rd_data_dec[8+0]^rd_addr[7];rd_data_dec[11]=~rd_data[11]^rd_addr[6];rd_data_dec[12]=rd_data[12]^rd_data_dec[8+1]^rd_addr[5];rd_data_dec[13]=rd_data[13]^rd_data_dec[8+3]^rd_addr[4];rd_data_dec[14]=rd_data[14]^rd_data_dec[8+4]^rd_addr[3];rd_data_dec[15]=rd_data[15]^rd_data_dec[8+5]^rd_addr[2];对字节2的解密算法:rd_data_dec[16]=rd_data[16]^rd_data_dec[16+3]^rd_addr[2];rd_data_dec[17]=rd_data[17]^rd_data_dec[16+4]^rd_addr[4];rd_data_dec[18]=rd_data[18]^rd_data_dec[16+6]^rd_addr[3];rd_data_dec[19]=rd_data[19]^rd_data_dec[16+7]^rd_addr[9];rd_data_dec[20]=rd_data[20]^rd_data_dec[16+0]^rd_addr[7];rd_data_dec[21]=rd_data[21]^rd_data_dec[16+1]^rd_addr[8];rd_data_dec[22]=~rd_data[22]^rd_addr[5];rd_data_dec[23]=rd_data[23]^rd_data_dec[16+2]^rd_addr[6];对字节3的解密算法:rd_data_dec[24]=rd_data[24]^rd_data_dec[24+5]^rd_addr[5];rd_data_dec[25]=rd_data[25]^rd_data_dec[24+7]^rd_addr[9];rd_data_dec[26]=rd_data[26]^rd_data_dec[24+6]^rd_addr[7];rd_data_dec[27]=rd_data[27]^rd_data_dec[24+1]^rd_addr[2];rd_data_dec[28]=rd_data[28]^rd_data_dec[24+2]^rd_addr[3];rd_data_dec[29]=rd_data[29]^rd_data_dec[24+3]^rd_addr[8];rd_data_dec[30]=~rd_data[30]^rd_addr[6];rd_data_dec[31]=rd_data[31]^rd_data_dec[24+4]^rd_addr[4];其中,rd_data表示解密前的数据,rd_data_dec表示解密后的数据,rd_addr表示读数据在FLASH中的地址。2.根据权利要求1所述的一种SPIFLASH加密接口,其特征在于:所述数据模块内设置有读数据缓存单元和写数据缓存单元。3.一种SPIFLASH加密数据的写入方法,包括如下步骤:S1:系统总线将写命令发送至命令模...

【专利技术属性】
技术研发人员:王运哲姚香君孙玉玺孙晓宁赵阳刘大铕刘奇浩
申请(专利权)人:山东华芯半导体有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1