1. 程式人生 > >智慧卡上電後返回ATR(即復位應答)時間過長而無法返ATR的解決方案

智慧卡上電後返回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的啟動程式碼講解。