• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    一種SPI FLASH加密接口及加密數據的讀寫方法技術

    技術編號:11515857 閱讀:416 留言: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  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
    主站蜘蛛池模板: 久久精品aⅴ无码中文字字幕重口| 国产精品无码亚洲精品2021 | 色综合无码AV网站| 亚洲中文无码线在线观看| 亚洲日韩精品无码AV海量| 国产成人AV无码精品| 精品国产a∨无码一区二区三区| 日韩精品无码免费视频| 久久无码高潮喷水| 亚洲精品无码不卡在线播放HE| 免费无码AV电影在线观看| 久久久久亚洲AV无码永不| 欧洲精品无码一区二区三区在线播放| 久久精品aⅴ无码中文字字幕重口 久久精品国产亚洲AV无码娇色 | 少妇无码?V无码专区在线观看| 亚洲AV无码一区二区三区系列| 精品久久久无码中字| 精品深夜AV无码一区二区老年| 亚洲中文字幕不卡无码| 免费无码AV一区二区| 欧洲精品无码成人久久久| 人妻无码αv中文字幕久久| 亚洲日韩精品无码一区二区三区| 日韩AV片无码一区二区不卡| 亚洲AV无码一区二区大桥未久 | 99久久亚洲精品无码毛片| 国产成人无码AV一区二区| 人妻无码久久中文字幕专区| 亚洲AV无码一区二区三区鸳鸯影院 | AV无码精品一区二区三区| 小SAO货水好多真紧H无码视频 | 无码人妻精品中文字幕免费| 中文字幕无码一区二区三区本日| 日产无码1区2区在线观看| 国产丝袜无码一区二区视频 | 精品日韩亚洲AV无码| 亚洲av无码一区二区三区网站| 亚洲国产无套无码av电影| 亚洲AV无码乱码在线观看富二代| 亚洲成AV人在线观看天堂无码| 亚洲爆乳精品无码一区二区三区|