客戶在RFID實際應用時,由於數據量較大,需要佔據多個扇區和塊,而之前我提供的接口,一次交互只能讀取一個塊;當數據量較大時,交互的時間就很長。基於這個需求,我爲RFID單片機程序添加了連續多塊讀的功能。
實現之前,確定傳輸的數據包還是採用之前的格式,一方面是方便,不用更改java接收部分的解析;一方面是,搞一個新的數據格式沒有必要,單片機的資源是有限的,一個數據包不能包含太多的數據。因此,即便是會多一些冗餘,這種方法依然是最有效的。
然後,就是參數;是用塊號爲單位,還是用扇區爲單位,還是用扇區和塊號作爲參數;本着怎麼簡單怎麼弄的原則,決定用扇區爲單位。因爲塊號範圍;S50卡的塊號範圍爲0-63,就要用8位來表示;而扇區爲0-15,用4位表示就行了。從這一點上看,以後要用更大容量的卡,這部分還要改。
本來還想實現塊寫,但是,單片機RAM容量是有限的,不能使用大的數據包。那就採用現有的方式不變。對於實際的應用來說,卡在第一次發行時,會寫入全部的資料,而最頻繁的使用過程,一般都是讀卡,以及,修改其中極小的一部分數據。
由於每個扇區的密碼都是不一樣的,在讀取連續的扇區時,可能會出現中途認證或者讀卡失敗的情況,因此,在Java端,提供了一個連續讀的接口;只有要讀取的所有的塊都讀取正確時,才認爲這一次連續讀取是成功的。
也想在java端提供一個連寫的接口,和黃討論了一下,沒有必要;因爲,這個寫的時間是比較長的,在調用這個方法時,阻塞時間長就不好了;讓客戶去做這並搞一個進度條,不是更好?
調試過程中遇到的問題:
for{}的前面那個括號忘寫了;而後面部分又剛好少了一個括號;於是,逃過了編譯器的檢查;花了一個小時時間,才解決;花這麼長時間的主要原因是調試工具,因爲簡單,懶得找人去飛線了。