本文主要講述了基於
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));
具體實現見下面**。
static struct spi_board_info spi2_board_info __initdata =
};static struct s3c64xx_spi_csinfo spi2_csi = ,
}
2 spi_driver
的構建與註冊:
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);
static struct miscdevice rc522_misc_device = ;
static struct file_operations rc522_fops = ;
//省略號這裡省略了fops裡各個操作的具體函式。
……
在read, write
操作裡都會呼叫到
writerawrc(unsigned char address, unsigned char value)
函式,在這個函式裡才真正實現了通過
spi來對
rc522
暫存器的讀寫操作:
//
//功 能:寫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 info結構體來描述...
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卡...