基于AMBA總線的智能卡控制器設計
3.2 數(shù)據(jù)收發(fā)控制模塊
數(shù)據(jù)收發(fā)模塊按照系統(tǒng)對控制寄存器,各時間寄存器和輸出字節(jié)控制寄存器的設置來工作。與復位模塊一樣,數(shù)據(jù)收發(fā)模塊也是由狀態(tài)機跳變來完成。系統(tǒng)在復位響應完成后進人IDLE狀態(tài),根據(jù)協(xié)議選擇字節(jié)傳輸方式(如圖4所示)或是塊傳輸方式(如圖5所示)。
在字節(jié)傳輸方式下,當系統(tǒng)設置了輸出字節(jié)控制寄存器后控制器就處于發(fā)送狀態(tài)。首先進入Prepare狀態(tài),將發(fā)送FIFO中的數(shù)據(jù)放入移位寄存器,并計算出數(shù)據(jù)的奇偶校驗位,為數(shù)據(jù)傳輸做好準備。1個ETU之后進入Start狀態(tài),拉低I/O數(shù)據(jù)線1個ETU來發(fā)送數(shù)據(jù)起始位。接著進入數(shù)據(jù)發(fā)送狀態(tài),將移位寄存器中的數(shù)據(jù)按1 b/ETU的速率串行發(fā)出。然后發(fā)送1 b奇偶校驗位。數(shù)據(jù)發(fā)送完畢后按照系統(tǒng)設置的保護時間將I/O線拉高若干個ETU。最后檢測是否已經(jīng)發(fā)出了指定的字節(jié)數(shù)(Trig_num)。如果數(shù)據(jù)發(fā)送完畢,則跳入IDLE狀態(tài)等待新的發(fā)送設置或轉(zhuǎn)入數(shù)據(jù)接收;否則進入Prepare狀態(tài)開始下一個字節(jié)的發(fā)送。
當系統(tǒng)處于數(shù)據(jù)接收狀態(tài)時,首先進入等待起始位狀態(tài),在此狀態(tài)設置超時計數(shù)器判斷卡是否有響應。當I/O線拉低后就進入接收起始位狀態(tài),在該狀態(tài)的0.5ETU時刻判斷I/O數(shù)據(jù)線是否仍然拉低。如果I/O線跳高則說明是由于I/O線抖動造成的起始位誤判,狀態(tài)跳回等待起始狀態(tài);如果I/O線仍然為低,則起始位接收成功,并在0.5個ETU后進入數(shù)據(jù)接收狀態(tài)。8 b數(shù)據(jù)按照1 b/ETU的速率接收,完成后轉(zhuǎn)入接收校驗位狀態(tài)。硬件根據(jù)接收的8 b數(shù)據(jù)計算出校驗位并與收到校驗位比較,如果不同則I/O線拉低告知智能卡數(shù)據(jù)錯誤請求重發(fā),相同則進入IDLE狀態(tài)等待接收下一個數(shù)據(jù)或是進入發(fā)送狀態(tài)。
評論