






摘 要:通過(guò)研究醫(yī)療檢測(cè)設(shè)備儀器中用于體外診斷樣本數(shù)據(jù)追蹤功能的RFID讀卡器在讀樣本標(biāo)簽數(shù)據(jù)時(shí)出現(xiàn)讀卡失敗的情況,對(duì)在線射頻讀卡器硬件組成和軟件系統(tǒng)程序邏輯設(shè)計(jì),以及讀卡器和標(biāo)簽中的密鑰存儲(chǔ)位置和交互驗(yàn)證過(guò)程進(jìn)行分析,同時(shí)對(duì)實(shí)際讀寫(xiě)卡過(guò)程中的軟件操作方式及讀卡器和標(biāo)簽的應(yīng)答模式進(jìn)行總結(jié),通過(guò)對(duì)比編輯器產(chǎn)生的.map文件,查詢并驗(yàn)證導(dǎo)致存儲(chǔ)區(qū)域密鑰常量發(fā)生修改的根本原因。結(jié)果表明,在程序跳轉(zhuǎn)過(guò)程中,由于引導(dǎo)程序中定時(shí)器中斷向量未及時(shí)關(guān)閉,導(dǎo)致變化的中斷運(yùn)行變量將系統(tǒng)密鑰內(nèi)存常量進(jìn)行修改,出現(xiàn)密鑰驗(yàn)證失敗導(dǎo)致讀卡數(shù)據(jù)失敗的問(wèn)題,通過(guò)及時(shí)關(guān)相應(yīng)中斷的方法,解決讀卡數(shù)據(jù)失敗的問(wèn)題,保證診斷檢測(cè)設(shè)備數(shù)據(jù)追蹤的穩(wěn)定運(yùn)行。
關(guān)鍵詞:RFID;射頻讀卡器;在線升級(jí);密鑰;.map文件
中圖分類(lèi)號(hào):TP391 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2024)24-0138-04
Abstract: By studying the failure of the RFID card reader used for in vitro diagnostic sample data tracking in medical testing equipment when reading sample label data, the hardware composition of the online RF card reader and the program logic design of the software system, as well as the key storage location and interactive verification process in the card reader and label are analyzed. At the same time, the software operation mode and the response mode of card reader and label are summarized in the actual process of card reading and writing. By comparing the .map file generated By the editor, the root cause of the change of the key constant of the storage area is queried and verified. The results show that in the process of program jump, as the timer interrupt vector in the boot program is not closed in time, the changed interrupt operation variable modifies the system key memory constant, and the failure of key verification leads to the failure of card reading data. By turning off the corresponding interrupt in time, the problem of failure of card reading data is solved to ensure the stable operation of data tracking of diagnosis and detection equipment.
Keywords: RFID; RF card reader; online upgrade; key; .map file
無(wú)線射頻識(shí)別技術(shù)(Radio Frequency Idenfication,RFID)是一種非接觸的自動(dòng)識(shí)別技術(shù),其基本原理是利用射頻信號(hào)在空間耦合(電感或電磁耦合)或雷達(dá)反射的傳輸特性,實(shí)現(xiàn)對(duì)被識(shí)別物體的自動(dòng)識(shí)別和數(shù)據(jù)傳輸。RFID系統(tǒng)至少包含讀卡器和電子標(biāo)簽2個(gè)部分。其中,讀卡器包含MCU控制單元和射頻發(fā)射天線,電子標(biāo)簽是射頻識(shí)別系統(tǒng)的數(shù)據(jù)載體。電子標(biāo)簽由標(biāo)簽天線和標(biāo)簽專(zhuān)用芯片組成。讀卡器和電子標(biāo)簽通過(guò)輸入密鑰或讀取存儲(chǔ)在設(shè)備中的密鑰進(jìn)行身份的認(rèn)證。
1 系統(tǒng)設(shè)計(jì)
根據(jù)ISO規(guī)范,通信距離小于10 cm的讀卡器和智能卡簡(jiǎn)稱(chēng)為PCD和PICC,本設(shè)計(jì)PCD部分采用STM32系列MCU與復(fù)旦微射頻芯片F(xiàn)M17520通過(guò),SPI通信接口進(jìn)行控制信息交互,PCD控制單元包含供電模塊、通信模塊、聲光報(bào)警模塊和射頻天線4個(gè)部分,射頻芯片和天線之間包含發(fā)射電路和接收電路2個(gè)部分,硬件系統(tǒng)連接如圖1所示。PCD和PICC之間采用ISO 14443-A操作幀格式進(jìn)行通信,PICC支持的卡格式為S50標(biāo)簽,通信載波頻率為13.56 MHz。程序讀標(biāo)簽交互流程如圖2所示。
PCD控制芯片采用BOOT和IAP程序架構(gòu),將程序存儲(chǔ)FLASH進(jìn)行分區(qū)配置,可支持串口在線程序升級(jí)。當(dāng)程序剛開(kāi)始上電時(shí)只在BOOT程序段運(yùn)行,上位機(jī)發(fā)送跳轉(zhuǎn)指令后進(jìn)行跳轉(zhuǎn),然后進(jìn)入正式IAP運(yùn)行程序中運(yùn)行檢測(cè)。
2 RFID密鑰存儲(chǔ)
S50卡內(nèi)部為1 KB存儲(chǔ)空間,卡片內(nèi)部以扇區(qū)為單位,共有16個(gè)扇區(qū),每個(gè)扇區(qū)分為4塊,每塊有16 B。扇區(qū)0是固化廠商的信息,不可存儲(chǔ)信息使用,其他15個(gè)扇區(qū)為可使用存儲(chǔ)扇區(qū),每個(gè)扇區(qū)的最后一塊為密鑰塊。S50卡的密鑰是對(duì)扇區(qū)有效的,在讀寫(xiě)任何扇區(qū)數(shù)據(jù)前都要先驗(yàn)證密鑰,且扇區(qū)密鑰相互獨(dú)立,卡片的默認(rèn)密鑰都是6個(gè)字節(jié)的0xFF,用戶可根據(jù)自身保護(hù)需求,按照特定的密鑰編寫(xiě)機(jī)制進(jìn)行密鑰設(shè)置。只有密鑰通過(guò)驗(yàn)證后才能讀寫(xiě)對(duì)應(yīng)塊數(shù)據(jù)。S50卡扇區(qū)結(jié)構(gòu)如圖3所示。
3 .map文件的作用
程序編譯器在生成MCU可執(zhí)行hex文件的過(guò)程中,會(huì)產(chǎn)生一些中間文件如(.o、.axf、.map等),.map文件是編譯器鏈接時(shí)生成的一個(gè)文件,其主要包含了交叉鏈接信息。通過(guò).map文件,可以知道整個(gè)工程的函數(shù)調(diào)用關(guān)系、FLASH和RAM占用情況及其詳細(xì)匯總信息,能具體到單個(gè)源文件(.c/.s)的占用情況,根據(jù)這些信息,可以對(duì)代碼進(jìn)行優(yōu)化。
.map文件可以分為以下5個(gè)組成部分:①程序段交叉引用關(guān)系(Section Cross References);②刪除映像未使用的程序段(Removing Unused input sections from the image);③映像符號(hào)表(Image Symbol Table);④映像內(nèi)存分布圖(Memory .map of the image);⑤映像組件大小(Image component sizes)。
其中,映像內(nèi)存分布圖描述了被引用的各個(gè)符號(hào)(程序段/數(shù)據(jù))在存儲(chǔ)器中的存儲(chǔ)地址、類(lèi)型、大小及作用域等信息。
4 問(wèn)題原因分析
在醫(yī)學(xué)檢驗(yàn)儀器RFID讀卡器進(jìn)行樣本標(biāo)簽讀取過(guò)程中,讀卡器中原始16組密鑰中0xXX,0xXX,0xXX,0xXX,0xXX,0xXX……0xXX,0xXX被修改,讀卡器重新上電后正常,設(shè)計(jì)測(cè)試程序進(jìn)行FLASH密鑰數(shù)據(jù)監(jiān)測(cè),連續(xù)運(yùn)行后發(fā)現(xiàn)密鑰被修改為0xXX,0xXX,0xXX,0xXX,0x00,0x00,0x00,0x00,0xXX……0xXX,其中被修改的密鑰為后4個(gè)Byte內(nèi)存地址數(shù)據(jù)。
IAP程序中密鑰KEY_A格式為16×6的無(wú)符號(hào)char型數(shù)組,MCU上電后將數(shù)組保存在內(nèi)存中,程序運(yùn)行過(guò)程中可能導(dǎo)致值變化的原因:①數(shù)據(jù)越界;②指針偏移量錯(cuò)誤。分析后無(wú)數(shù)據(jù)越界風(fēng)險(xiǎn)和指針偏移量錯(cuò)誤。
使用測(cè)試程序?qū)Τ绦蛘{(diào)用密鑰時(shí)間及密鑰內(nèi)存位置修改進(jìn)行監(jiān)控,監(jiān)控發(fā)現(xiàn)修改的密鑰為4個(gè)Byte內(nèi)存地址數(shù)據(jù)。研究?jī)x器運(yùn)行邏輯后,發(fā)現(xiàn)密鑰修改時(shí)間為串口跳轉(zhuǎn)指令發(fā)出后,即程序跳轉(zhuǎn)時(shí)密鑰數(shù)據(jù)被改變。進(jìn)行程序.map分析,IAP程序中的密鑰內(nèi)存地址和BOOT程序的Timer_1ms變量?jī)?nèi)存地址一致,懷疑為此變量值變化覆蓋導(dǎo)致,BOOT和IAP程序.map文件如圖4所示。
Timer_1ms為無(wú)符號(hào)整型變量,占用4字節(jié)數(shù),內(nèi)存保存地址為0x2000003C—0x2000003F,和密鑰KEY_A內(nèi)存保存0x20000038—0x20000097地址重合,參數(shù)占用地址及字節(jié)數(shù)見(jiàn)表1。判斷為跳轉(zhuǎn)指令發(fā)送時(shí)BOOT程序定時(shí)器中斷中毫秒定時(shí)器變量覆蓋IAP內(nèi)存常量導(dǎo)致密鑰數(shù)據(jù)出錯(cuò)。
驗(yàn)證過(guò)程如下,增加跳轉(zhuǎn)延遲時(shí)間至500 ms后進(jìn)行FLASH偏移,監(jiān)控程序運(yùn)行后記錄密鑰被修改位置為0x01,0xF3轉(zhuǎn)換為十進(jìn)制499,為設(shè)置的延時(shí)時(shí)間,即跳轉(zhuǎn)后毫秒定時(shí)器中斷進(jìn)入了499次,然后進(jìn)行中斷向量偏移,延時(shí)跳轉(zhuǎn)程序如圖5所示。
5 解決措施
分析測(cè)試后得出,Timer_1ms變量只在BOOT程序中定時(shí)器中斷使用,未在IAP正式程序中使用,不能簡(jiǎn)單地進(jìn)行關(guān)總中斷操作。修改程序并實(shí)測(cè),結(jié)果分析如下:當(dāng)關(guān)總中斷時(shí),會(huì)導(dǎo)致程序不響應(yīng)中斷,但是中斷標(biāo)志位會(huì)依然置位,當(dāng)正式程序IAP運(yùn)行并打開(kāi)總中斷時(shí),程序會(huì)立即響應(yīng)中斷,但是部分中斷無(wú)法找到中斷處理函數(shù),程序卡死,導(dǎo)致程序無(wú)法運(yùn)行,所以不能簡(jiǎn)單地進(jìn)行開(kāi)關(guān)總中斷處理。
單獨(dú)關(guān)斷變量所在定時(shí)器中斷,經(jīng)測(cè)試驗(yàn)證后得出:在跳轉(zhuǎn)函數(shù)指針之前需要將引起IAP中內(nèi)存變量變化的中斷源進(jìn)行關(guān)閉,上述問(wèn)題中的中斷源為定時(shí)器4,即跳轉(zhuǎn)函數(shù)指針前將定時(shí)器4失能,經(jīng)測(cè)試驗(yàn)證后問(wèn)題得到解決,疲勞測(cè)試無(wú)異常。失能程序如圖6所示。
6 結(jié)束語(yǔ)
在包含有BOOT和IAP程序的嵌入式系統(tǒng)中,在正常使用或程序在線升級(jí)完畢需要跳轉(zhuǎn)時(shí),當(dāng)BOOT程序接收到跳轉(zhuǎn)指令后程序進(jìn)行跳轉(zhuǎn)函數(shù)指針偏移前,需要將可能會(huì)觸發(fā)中斷的中斷源進(jìn)行關(guān)閉,然后在正式IAP程序中重新進(jìn)行初始化使用,否則會(huì)導(dǎo)致在跳轉(zhuǎn)過(guò)程中進(jìn)入部分中斷,中斷中所產(chǎn)生的變量值變化會(huì)導(dǎo)致IAP程序中的常量值發(fā)生改變,從而引發(fā)系統(tǒng)工作異常。
參考文獻(xiàn):
[1] 譚澤斌.基于STM32的智能卡讀寫(xiě)器的設(shè)計(jì)[D].北京:北京郵電大學(xué),2020.
[2] 謝東江,劉奭奭,李劼科.基于RFID技術(shù)的智能輸送線系統(tǒng)設(shè)計(jì)[J].機(jī)電工程技術(shù),2023,52(10):170-173.
[3] 戴彩艷,蔡堅(jiān)勇,陳銀燕,等.13.56MHz RFID讀寫(xiě)器天線的設(shè)計(jì)與仿真[J].無(wú)線電工程,2013,43(1):42-45.
[4] 許鍇.基于RFID技術(shù)的圖書(shū)館智能管理系統(tǒng)[J].現(xiàn)代電子技術(shù),2020,43(23):6-10.
[5] 星翼電子科技有限公司(正點(diǎn)原子).STM32 MAP文件淺析[Z].
[6] 李婷.RFID關(guān)鍵技術(shù)及其應(yīng)用研究[D].南京:南京郵電大學(xué),2017.
[7] 岳濤.RFID關(guān)鍵技術(shù)及其在現(xiàn)代物流中的應(yīng)用研究[D].武漢:武漢理工大學(xué),2010.
[8] 童冠,趙葉,佘帆.基于RFID技術(shù)的電力企業(yè)物資倉(cāng)儲(chǔ)管理優(yōu)化方案[J].海峽科學(xué),2023(10):46-48,85.
[9] 謝斐.RFID技術(shù)在醫(yī)院設(shè)備管理中的應(yīng)用探析[J].科技創(chuàng)新與應(yīng)用,2020(34):165-166.
[10] 陳爍維,徐煒琳,王文娟.RFID射頻技術(shù)在冷鏈物流倉(cāng)儲(chǔ)中的應(yīng)用[J].內(nèi)蒙古科技與經(jīng)濟(jì),2023(12):101-103.
[11] 郭夢(mèng)伊.基于RFID技術(shù)的物流倉(cāng)儲(chǔ)體系研究[J].電子測(cè)試,2022(15):137-139.
[12] 薛竹溪.基于RFID技術(shù)的富士康倉(cāng)儲(chǔ)管理應(yīng)用研究[D].太原:山西財(cái)經(jīng)大學(xué),2023.
[13] 王思文.基于RFID技術(shù)的備件倉(cāng)儲(chǔ)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連海事大學(xué),2019.
[14] 徐明.RFID技術(shù)在供應(yīng)鏈領(lǐng)域的應(yīng)用探究[J].物流工程與管理,2023,45(5):64-66.