天天看點

智能卡上電後傳回ATR(即複位應答)時間過長而無法返ATR的解決方案

關于智能卡片上電後傳回ATR時間過長的問題,是在COS開發完成後的智能卡相容性測試過程中發現的,不同讀卡器廠商均應遵循ISO7816接觸卡協定來設計接觸型讀卡器,理論上ATR響應時間是一樣的,不過實測之後有一定的差距。這也導緻了載入開發COS的智能IC卡在某些讀卡器下工作正常,而在某些讀卡器下出現無法響應的情況,即卡片上電複位後讀卡器接收不到卡片發來的ATR資料。通過測試裝置MPManager執行7816測試指令來分析波形,發現智能卡傳回ATR時間過長。

為了解決這個問題,必須要縮短智能卡内部MCU上電後至執行發送ATR代碼這個過程的執行時間。當時項目用的智能卡MCU核心是ARM的M0系列。分析發現MCU的啟動代碼中的__main 标号表示 C/C++标準實時庫函數裡的一個初始化子程式__main 的入口位址。該程式的一個主要作用是初始化堆棧,并初始化映像檔案,最後跳轉到 C 程式中的 main函數。如果全局變量定義數量比較多,那麼這個初始化過程消耗的時間就比較長。通過在不影響系統整體功能的前提下可壓縮全局變量數量達到縮短ATR響應時間的目的。經過測試各讀卡器均能成功傳回ATR。當然這隻是其中一種解決方法,可能還會有其他方法,比如把一些前期初始化的東西放到後面執行傳回ATR的代碼後再執行等等。

具體MCU在執行main函數之前執行了什麼,可以參考一位技術達人的文章看一下http://www.51hei.com/bbs/dpj-26892-1.html

下一篇文章會分享一下安富萊大神的STM32的啟動代碼講解。

繼續閱讀