RC522 模組驅動程式

2021-09-06 20:24:27 字數 1710 閱讀 5404

本文主要講述了基於spi匯流排的rc522驅動程式的設計。描述了主控如何與從裝置通過spi匯流排進行資料的讀寫。

一 在spi驅動中,有兩個重要的結構:spi_device&spi_driver。

1  spi_device的構建與註冊:

spi_device板資訊用spi_board_info結構體來描述,它描述了spi外設(rc522模組)使用的主機控制器序號,片選訊號,資料位元率,傳輸方式等。故要先填充struct spi_board_info這個結構體。--4412平台在mach-smdk4x12.c裡,三星給的bsp包裡面已經配置好了這些,我們要做的只是開啟config_s3c64xx_dev_spi這個巨集。

spi_register_board_info(spi2_board_info, array_size(spi2_board_info));

具體實現見下面**。

[cpp]view plain

copy

static struct spi_board_info spi2_board_info __initdata =   

};  

static struct s3c64xx_spi_csinfo spi2_csi = ,  

}  

2  spi_driver的構建與註冊:

[cpp]view plain

copy

spi_register_driver(&rc522_driver);  

static struct spi_driver rc522_driver = ,  

};  

static int rc522_probe(struct spi_device *spi)  

;  

二 註冊好了spi裝置與驅動,就可以通過spi匯流排實現資料讀寫了。

這裡註冊了乙個混合裝置:misc_register(&rc522_misc_device);

[cpp]view plain

copy

static struct miscdevice rc522_misc_device = ;  

static struct file_operations rc522_fops = ;  

//省略號這裡省略了fops裡各個操作的具體函式。  

……  

在read, write操作裡都會呼叫到writerawrc(unsigned char address, unsigned char value)函式,在這個函式裡才真正實現了通過spi來對rc522暫存器的讀寫操作:

[cpp]view plain

copy

//  

//功 能:寫rc522暫存器  

// value[in]:寫入的值  

/  void writerawrc(unsigned char address, unsigned char value)  

;  

三 新增定時器

為了節省cpu資源,需要新增乙個定時器,每隔一定的時間才讀卡一次。**略。

到此為止,驅動的關鍵部分已經完工,只需把spi_register_driver(&rc522_driver)和misc_register(&rc522_misc_device)放進rfid_rc522_init()函式即可進行編譯除錯。

RC522 模組驅動程式

本文主要講述了基於 spi匯流排的 rc522 驅動程式的設計。描述了主控如何與從裝置通過 spi匯流排進行資料的讀寫。一 在spi 驅動中,有兩個重要的結構 spi device spi driver。1 spi device 的構建與註冊 spi device 板資訊用 spi board in...

51微控制器驅動RC522模組

sbit p11 p1 1 作為乙個輔助led燈而已 bit cmdvalid 0 u8 status u8 ptagtype 2 u8 code defaultkey 6 配帶的那張白卡的扇區密碼 u8 idata mlastselectedsnr 4 這個用來存放卡片的序列號,4個位元組 u8 ...

RC522複製門禁卡(二)

經過一天的奮戰,改了一下例程,做成了key1一鍵讀取s50所有扇區資料,key2可以一鍵寫入給另乙個s50。需要注意跳過每個扇區的第四塊,這是當前扇區的控制塊,就算寫的資料一樣,也會導致s50資料不可讀。之前不清楚這個,報廢了三塊s50門禁卡,都不能讀資料了。讀取家裡門禁卡資料並寫入乙個新的s50卡...