復旦微電子CPU卡FMCOS協議封裝

2021-09-10 06:27:54 字數 3368 閱讀 1819

#ifndef _fm_cos_h_

#define _fm_cos_h_

#define sw_ok           (0x9000)

// fmcos命令集

namespace fmcos

;#endif // _fm_cos_h_

#include

#include "fmcos.h"

// fmcos命令集

namespace fmcos

// pcb初始化

void pcbinit()

// 擦除當前df下所有檔案(不包含df目錄本身)

int erasecommand(quint8* cmd)

// 請求乙個用於線路保護過程的隨機數

int getchallengecommand(quint8* cmd, quint8 len)

// 讀取二進位制檔案內容

int readbinraycommand(quint8* cmd, quint16 offset, quint8 len)

// 更新二進位制檔案內容

int writebinarycommand(quint8* cmd, quint16 offset, const quint8* data, quint8 len)

// 在金鑰檔案中增加金鑰(金鑰長度8位元組)

int writelinekeycommand(quint8* cmd, quint8 keyid, const quint8* key)

int writeexternalkeycommand(quint8* cmd, quint8 keyid, const quint8* key)

int writekeycommand(quint8* cmd, quint8 keyid, quint8 type, const quint8* key)

;*data = type; // 金鑰型別

*(data + 1) = 0xf0; // 使用權

*(data + 2) = 0xf0; // 更改權

*(data + 3) = 0xaa; // 後續狀態(當口令核對成功或外部認證成功後,置安全狀態暫存器值為後續狀態的低半位元組)

*(data + 4) = 0x33; // 錯誤計數器(低半位元組:剩餘可錯誤次數;高半位元組:最大可錯誤次數)

*(data + 5) = *key; // 8位元組金鑰

*(data + 6) = *(key + 1);

*(data + 7) = *(key + 2);

*(data + 8) = *(key + 3);

*(data + 9) = *(key + 4);

*(data + 10) = *(key + 5);

*(data + 11) = *(key + 6);

*(data + 12) = *(key + 7);

return fmcos::command(cmd, 0x80, 0xd4, 0x01, keyid, sizeof(data), data);

}// 通過檔案標識選擇檔案

int selectfilecommand(quint8* cmd, quint16 fileid)

;*data = (fileid >> 8) & 0xff; // 檔案標識

*(data + 1) = (fileid & 0xff);

return fmcos::command(cmd, 0x00, 0xa4, 0x00, 0x00, sizeof(data), data);

}// 建立檔案系統,包含mf,df和ef

int createmffilecommand(quint8* cmd)

// 80 e0 ** ** 0d 

return fmcos::command(cmd, 0x80, 0xe0, (fileid >> 8) & 0xff, (fileid & 0xff), sizeof(data), data);

}int createkeyfilecommand(quint8* cmd, quint16 fileid, quint16 size)

int createbinaryfilecommand(quint8* cmd, quint16 fileid, quint16 size)

int createeffilecommand(quint8* cmd, quint16 fileid, quint8 type, quint16 size)

;*data = type; // 檔案型別

*(data + 1) = (size >> 8) & 0xff; // 檔案空間

*(data + 2) = (size & 0xff);

*(data + 3) = 0xf0; // 讀許可權

*(data + 4) = 0xf0; // 寫許可權

*(data + 5) = 0xff; // 保留字

*(data + 6) = 0xff; // 不帶線路保護金鑰讀,讀寫操作時使用標識為0x00的金鑰

// 80 e0 ** ** 0d 

return fmcos::command(cmd, 0x80, 0xe0, (fileid >> 8) & 0xff, (fileid & 0xff), sizeof(data), data);

}// 外部認證

int externalauthenticatecommand(quint8* cmd, quint8 keyid, const quint8* data)

// 命令:cla ins p1 p2 00,應答:sw1 sw2

int command(quint8* cmd, quint8 cla, quint8 ins, quint8 p1, quint8 p2)

// 命令:cla ins p1 p2 le,應答:le 位元組data sw1 sw2

int command(quint8* cmd, quint8 cla, quint8 ins, quint8 p1, quint8 p2, quint8 le)

// 命令:cla ins p1 p2 lc data,應答:sw1 sw2

int command(quint8* cmd, quint8 cla, quint8 ins, quint8 p1, quint8 p2, quint8 lc, const quint8* data)

return (7 + lc);

}// 命令:cla ins p1 p2 lc data le,應答:le 位元組data sw1 sw2

int command(quint8* cmd, quint8 cla, quint8 ins, quint8 p1, quint8 p2, quint8 lc, const quint8* data, quint8 le)

*(cmd + 7 + lc) = le;

return (8 + lc);}}

印刷微電子

印刷微電子就是基於印刷原理的電子學。傳統微電子學從單晶矽襯底材料的製備到在矽單晶體上形成電晶體與互連線所需要的薄膜沉積 光刻 刻蝕 封裝等,所涉及的工藝程式多達數百項。並且由於傳統微電子的加工裝置價值昂貴,傳統的微電子行業被一些大公司壟斷。反觀傳統的印刷行業工藝簡單,加工裝置便宜。加之pcb tft...

微電子複習專用

晶元 在晶元上經製備出的電晶體或電路。1957年,發現sio2具有阻止施主雜質或受主雜質向矽內擴散的作用,掩蔽作用。把不需要擴散的區域用一定厚度的sio2保護起來。sio2在積體電路中的作用 sio2薄膜生長方法 1 熱氧化 矽片表面與水 氧或其他含氧物質在高溫下進行氧化反應應而生成sio2薄膜的方...

微電子向納電子轉型加速

實際上,奔 4個人計算機已經採用了 90奈米技術,開始了從微電子向納電子的歷史轉變。現在,情況怎樣呢?當今,各種手持移動裝置 滿天飛 不到 2 3年就要 換 如今,手機成了大眾消費品,造成極大的資源浪費。移動裝置要求處理器既小巧又節能,這下可忙壞了世界晶元生產廠商,他們都開足馬力搞 大生產 運動。6...