本文主要講述了基於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卡...