1. 程式人生 > >RC522在S5PV210處理器上的linux驅動除錯(3)

RC522在S5PV210處理器上的linux驅動除錯(3)

現在到上層的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函式是無法實現的,這個是最基礎的讀暫存器的資料的函式。

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()  ----- */
這個函式首先是寫了一個地址,然後讀取資料,這兒有一個問題,在寫完成之後,驅動底層的片選CS就會重新拉高了,然後再read,cs片選再被拉低。但是在微控制器的RC522程式中,在向一個地址讀取數值的時候,先發再收,這個過程CS會始終拉低,所以這個函式是無法完成暫存器的讀操作的。對此我深信不疑。