RC522在S5PV210處理器上的linux驅動除錯(3)
阿新 • • 發佈:2019-01-10
現在到上層的rc522測試程式的編寫了。
首先列幾篇博文參考
http://blog.csdn.net/fulinus/article/details/40898677
http://blog.csdn.net/WANG__RONGWEI/article/details/50717883
http://download.csdn.net/detail/wang__rongwei/9440094
http://blog.csdn.net/vanbreaker/article/details/7737833
在做這個過程中,我閱讀了大量的博文和書,有些博文給我很多引導,但是也有很多博文帶我走了彎路,浪費了大量的時間,這也不是怪人家的博文,而是每個人所使用的平臺不一樣,導致了遇到的問題不一樣,要處理的問題也不一樣。
我所參考的程式碼是第一篇博文的程式碼,注意其提供的程式碼是應用層程式碼,使用的驅動程式是我上一篇文章寫的spidev.c。
其提供的開原始碼,參考意義極大,可以省去很多麻煩,但是我也可以明確的說,這個原始碼在我所使用的S5PV210上是不能用的,某種程度上說,我懷疑這個原始碼在之前那些博主的實踐中肯定也出現了問題,我不相信其實現了功能。
這個原始碼有一個小錯誤,編譯時大家會發現,但是最重要的問題是rc522.c檔案中的read_reg函式是無法實現的,這個是最基礎的讀暫存器的資料的函式。
這個函式首先是寫了一個地址,然後讀取資料,這兒有一個問題,在寫完成之後,驅動底層的片選CS就會重新拉高了,然後再read,cs片選再被拉低。但是在微控制器的RC522程式中,在向一個地址讀取數值的時候,先發再收,這個過程CS會始終拉低,所以這個函式是無法完成暫存器的讀操作的。對此我深信不疑。void read_reg (unsigned char addr, unsigned char *data) { int status = MI_ERR; addr = ((addr << 1) & 0x7E) | 0x80; memset(data, 0, sizeof(unsigned char)); status = write(fd, &addr, 1); if(status < 0) { pabort("can't write byte to device"); } status = read(fd, data, 1); if(status < 0) { pabort("can't read byte form device"); } } /* ----- End of read_reg() ----- */