最近為了在arm板子上移植刷卡器,比較簡單,但也遇到了坑,現(xiàn)在和大家分享下。
購買刷卡器
某寶很多,應(yīng)該選哪一種呢?一口君一共買了4種刷卡器,有2種可以用,還有2種不能用。下圖為最方便的一款,一口君選的是ID卡。
為了避免做廣告嫌疑,就不貼購買鏈接了,但是切記:一定要買帶serial芯片的,比如ch341或者rs232 要不即使和這個刷卡器一樣,也可能無法使用,切記。
價格大概45左右,不要買18塊左右的,如果怕買錯,就給一口君留言。
移植USB轉(zhuǎn)串口驅(qū)動
進入內(nèi)核找到對應(yīng)的USB轉(zhuǎn)串口驅(qū)動,位置如下:
選中該驅(qū)動
保存退出,重新編譯內(nèi)核?!救绻瞧渌吞柕拇?,請選擇對應(yīng)的驅(qū)動】
測試設(shè)備
下載編譯好的內(nèi)核到開發(fā)板(一口君是通過nfs掛載然后拷貝到/boot目錄下),重啟后插上刷卡器,看到
ch341-uart converter now attached to ttyUSB0
就成功一半了。驅(qū)動會自動為該串口創(chuàng)建該字符設(shè)備,我們只需要像操作普通字符設(shè)備一樣就可以使用該刷卡器了。
查看字符設(shè)備節(jié)點
該字符設(shè)備節(jié)點位于/dev/ttyUSB0,由該字符設(shè)備節(jié)點信息可知該字符設(shè)備主設(shè)備號188,次設(shè)備號為0。
編寫測試程序
編寫測試程序思路很簡單,
- 通過open函數(shù)打開字符設(shè)備ttyUSB0
- 通過函數(shù)ioctl設(shè)置對應(yīng)參數(shù),波特率9600,數(shù)據(jù)位數(shù)8,奇偶校驗位0,終止位1。
- 通過read函數(shù)可以阻塞的讀取卡號了。
文件目錄結(jié)構(gòu)如下:
card.c
1 #include <stdio.h> 2 #include <unistd.h> 3 #include "IC_serial.h" 4 void main(void) 5 { 6 int i; 7 int fd; 8 char buf[32]={0}; 9 10 open_port(&fd); 11 uart_init(fd); 12 13 for(i=0;i<20;i++) 14 { 15 read_from_serial(fd,buf); 16 printf("card:%s\n",buf); 17 } 18 }
交叉編譯:
arm-linux-gnueabihf-gcc *.c -o run
運行結(jié)果如下:
完整代碼,關(guān)注公眾號,后臺回復(fù) card。