RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動(dòng)開發(fā)-編寫RFID-RC522射頻刷卡模塊驅(qū)動(dòng)

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:14 ? 次閱讀

【摘要】 當(dāng)前文章介紹如果在Linux系統(tǒng)下編寫MF-RC522模塊驅(qū)動(dòng),配合應(yīng)用層,完成IC卡號(hào)讀取,扇區(qū)讀寫,密碼驗(yàn)證等等。當(dāng)前開發(fā)板采用友善之臂Tiny4412,芯片三星的EXYNOS4412,驅(qū)動(dòng)代碼沒有采用SPI子系統(tǒng),直接控制IO口模擬SPI時(shí)序完成與MF-RC522之間通訊。

1. MF-RC522模塊介紹

MFRC522是應(yīng)用于13.56MHz非接觸式通信中高集成度的讀寫卡芯片,針對(duì)“三表”應(yīng)用推出的一款低電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜式手持設(shè)備研發(fā)的較好選擇。便攜式手持設(shè)備研發(fā)的較好選擇。MFRC522利用了先進(jìn)的調(diào)制和解調(diào)概念,集成了在13.56MHz下所有類型的被動(dòng)非接觸式通信方式和協(xié)議。支持14443A兼容應(yīng)答器信號(hào)。數(shù)字部分處理ISO14443A幀和錯(cuò)誤檢測(cè)。此外,還支持快速CRYPTO1加密算法,用語(yǔ)驗(yàn)證MIFARE系列產(chǎn)品。MFRC522支持MI FARE系列更高速的非接觸式通信,雙向數(shù)據(jù)傳輸速率高達(dá)424kbit/s。作為13.56MHz高集成度讀寫卡系列芯片族的新成員,MFRC522與MF RC500和MFRC530有不少相似之處,同時(shí)也具備許多特點(diǎn)和差異。它與主機(jī)間通信采用SPI模式,有利于減少連線,縮小PCB板體積,降低成本。

淘寶上MFRC522的成品模塊非常多,購(gòu)買都會(huì)送幾張白卡(IC卡),完成讀寫實(shí)驗(yàn)。

淘寶上購(gòu)買的MF-RC522模塊基本是引出的SPI接口,實(shí)際上MF-RC522本身還支持IIC,UART協(xié)議,SPI相比來(lái)講,協(xié)議更加簡(jiǎn)單,速度也快。

當(dāng)前我采用的就是淘寶購(gòu)買一個(gè)封裝好的成品模塊,采用MFRC522原裝芯片設(shè)計(jì)讀卡電路,使用方便,成本低廉,適用于設(shè)備開發(fā)、讀卡器開發(fā)等高應(yīng)用的用戶,需要進(jìn)行射頻卡終端設(shè)計(jì)/生產(chǎn)的用戶。本模塊可直接裝入各種讀卡器模具。模塊采用電壓為3.3V,通過(guò)SPI接口簡(jiǎn)單的幾條線就可以直接與用戶任何CPU主板相連接通信,可以保證模塊穩(wěn)定可靠的工作、讀卡距離遠(yuǎn)。

image-20220110135943959image-20220110140109007

當(dāng)前文章介紹如果在Linux系統(tǒng)下編寫MF-RC522模塊驅(qū)動(dòng),配合應(yīng)用層,完成IC卡號(hào)讀取,扇區(qū)讀寫,密碼驗(yàn)證等等。當(dāng)前開發(fā)板采用友善之臂Tiny4412,芯片是三星的EXYNOS4412,驅(qū)動(dòng)代碼沒有采用SPI子系統(tǒng),直接控制IO口模擬SPI時(shí)序完成與MF-RC522之間通訊。

購(gòu)買模塊時(shí),會(huì)送一張IC白卡和一個(gè)鑰匙扣,雖然形狀不一樣,內(nèi)部芯片型號(hào)都是屬于S50卡,常用的公交車卡、地鐵卡、超市會(huì)員卡等等,都是屬于這種S50卡。這個(gè)洗頭還有一個(gè)S70類型的卡,空間比S50大4倍。S50卡內(nèi)部就是一個(gè)EEPROM空間,可以存放任何數(shù)據(jù),空間一共分為16個(gè)扇區(qū),每個(gè)扇區(qū)由4塊(0、1、2、3)組成。實(shí)際操作時(shí),將16個(gè)扇區(qū)分為64個(gè)塊,按絕對(duì)地址編號(hào)為0-63。

IC卡沒有電源的,它是由IC芯片、感應(yīng)天線組成,封裝在一個(gè)標(biāo)準(zhǔn)的PVC卡片內(nèi),芯片及天線無(wú)任何外露部分。是世界上最近幾年發(fā)展起來(lái)的一項(xiàng)新技術(shù),它成功的將射頻識(shí)別技術(shù)和IC卡技術(shù)結(jié)合起來(lái),結(jié)束了無(wú)源(卡中無(wú)電源)和免接觸這一難題,是電子器件領(lǐng)域的一大突破??ㄆ谝欢ň嚯x范圍(通常為5—10cm)靠近讀寫器表面,通過(guò)無(wú)線電波的傳遞來(lái)完成數(shù)據(jù)的讀寫操作。

2. 硬件原理連線

3. 驅(qū)動(dòng)代碼示例

3.1 rc522.c 源代碼

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "rfid_rc522.h"
#include 
#include 
/*--------------------------------RC522相關(guān)操作代碼---------------------------------------------*/

/*
函數(shù)功能:RC522初始化
Tiny4412硬件連接:
	DO--MISO :GPB_2
	DI--MOSI :GPB_3
	CLK-SCLK :GPB_0
	CS--CS   :GPB_1
	RST--    :GPB_4
*/
void RC522_IO_Init(void)
{
	/*1. 注冊(cè)GPIO*/
	gpio_request(EXYNOS4_GPB(0), "RC522_CLK-SCLK");
	gpio_request(EXYNOS4_GPB(1), "RC522_CS");
	gpio_request(EXYNOS4_GPB(2), "MOSI");
	gpio_request(EXYNOS4_GPB(3), "RC522_MOSI");
	gpio_request(EXYNOS4_GPB(4), "RST");
	
	/*2. 配置GPIO口模式*/
	s3c_gpio_cfgpin(EXYNOS4_GPB(0), S3C_GPIO_OUTPUT);  //時(shí)鐘
	s3c_gpio_cfgpin(EXYNOS4_GPB(1), S3C_GPIO_OUTPUT);  //片選
	s3c_gpio_cfgpin(EXYNOS4_GPB(2), S3C_GPIO_INPUT);  //輸入模式
	s3c_gpio_cfgpin(EXYNOS4_GPB(3), S3C_GPIO_OUTPUT); //輸出模式
	s3c_gpio_cfgpin(EXYNOS4_GPB(4), S3C_GPIO_OUTPUT); //輸出模式
	
	/*3. 上拉GPIO口*/
	gpio_set_value(EXYNOS4_GPB(0), 1);
	gpio_set_value(EXYNOS4_GPB(1), 1);
	gpio_set_value(EXYNOS4_GPB(3), 1);
	gpio_set_value(EXYNOS4_GPB(4), 1);
}
/*
函數(shù)功能:SPI時(shí)序讀寫一個(gè)字節(jié)
說(shuō)    明:SPI底層時(shí)序,程序的移植接口
*/
u8 RC522_SPI_ReadWriteOneByte(u8 data_tx)
{
	 u8 data_rx=0;
	 u8 i;
	 for(i=0;i<8;i++)
	 {
		gpio_set_value(EXYNOS4_GPB(0), 0);
		if(data_tx&0x80)gpio_set_value(EXYNOS4_GPB(3), 1);
		else gpio_set_value(EXYNOS4_GPB(3), 0);
		data_tx<<=1; //繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)

		gpio_set_value(EXYNOS4_GPB(0), 1);
		data_rx<<=1;
		if(gpio_get_value(EXYNOS4_GPB(2)))data_rx|=0x01;
	 }
	 return data_rx;
}
/*
功能描述:選卡讀取卡存儲(chǔ)器容量
輸入?yún)?shù):serNum 傳入卡序列號(hào)
返 回 值:成功返回卡容量
*/
u8 RC522_MFRC522_SelectTag(u8 *serNum) //讀取卡存儲(chǔ)器容量
{     
	u8 i;     
	u8 status;     
	u8 size;     
	u8 recvBits;     
	u8 buffer[9];
	     
	buffer[0]=PICC_ANTICOLL1;	  //防撞碼1     
	buffer[1]=0x70;
	buffer[6]=0x00;						     
	for(i=0;i<4;i++)					
	{
		buffer[i+2]=*(serNum+i);	//buffer[2]-buffer[5]為卡序列號(hào)
		buffer[6]^=*(serNum+i);	  //卡校驗(yàn)碼
	}
	
	RC522_CalulateCRC(buffer,7,&buffer[7]);	//buffer[7]-buffer[8]為RCR校驗(yàn)碼
	RC522_ClearBitMask(Status2Reg,0x08);
	status=RC522_PcdComMF522(PCD_TRANSCEIVE,buffer,9,buffer,&recvBits);
	
	if((status==MI_OK)&&(recvBits==0x18))    
		size=buffer[0];     
	else    
		size=0;
	return size; 
}
/*
延時(shí)函數(shù),納秒級(jí)
*/
void RC522_Delay(u32 ns)
{
	ndelay(ns);
}
/*
函數(shù)功能:RC522芯片初始化
*/
void RC522_Init(void)
{
  RC522_IO_Init();			 //RC522初始化
  RC522_PcdReset();  		 //復(fù)位RC522 
  RC522_PcdAntennaOff();	 //關(guān)閉天線
  msleep(2);  		  		 //延時(shí)2毫秒
  RC522_PcdAntennaOn();		 //開啟天線
  M500PcdConfigISOType('A'); //設(shè)置RC632的工作方式
}
/*
函數(shù)功能:復(fù)位RC522
*/
void RC522_Reset(void)
{
  RC522_PcdReset();				//復(fù)位RC522
  RC522_PcdAntennaOff();		//關(guān)閉天線
  msleep(2);  		  		    //延時(shí)2毫秒
  RC522_PcdAntennaOn();		    //開啟天線  	
}
/*
功    能: 尋卡
參數(shù)說(shuō)明: req_code[IN]:尋卡方式
                0x52   = 尋感應(yīng)區(qū)內(nèi)所有符合14443A標(biāo)準(zhǔn)的卡
                0x26   = 尋未進(jìn)入休眠狀態(tài)的卡
          			pTagType[OUT]:卡片類型代碼
                0x4400 = Mifare_UltraLight
                0x0400 = Mifare_One(S50)
                0x0200 = Mifare_One(S70)
                0x0800 = Mifare_Pro(X)
                0x4403 = Mifare_DESFire
返 回 值: 成功返回MI_OK
*/
char RC522_PcdRequest(u8 req_code,u8 *pTagType)
{
	char status;  
	u8 unLen;
	u8 ucComMF522Buf[MAXRLEN];  	   		// MAXRLEN  18

	RC522_ClearBitMask(Status2Reg,0x08);	//清RC522寄存器位,/接收數(shù)據(jù)命令
	RC522_WriteRawRC(BitFramingReg,0x07);   //寫RC632寄存器
	RC522_SetBitMask(TxControlReg,0x03);    //置RC522寄存器位
 
	ucComMF522Buf[0]=req_code; 	    //尋卡方式
	
	status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen); //通過(guò)RC522和ISO14443卡通訊
	
	if((status==MI_OK)&&(unLen==0x10))
	{    
		*pTagType=ucComMF522Buf[0];
		*(pTagType+1)=ucComMF522Buf[1];
	}
	else
	{
	  status = MI_ERR;
	}  
	return status;
}
/*
功    能: 防沖撞
參數(shù)說(shuō)明: pSnr[OUT]:卡片序列號(hào),4字節(jié)
返    回: 成功返回MI_OK
*/
char RC522_PcdAnticoll(u8 *pSnr)
{
    char status;
    u8 i,snr_check=0;
    u8 unLen;
    u8 ucComMF522Buf[MAXRLEN]; 
    
    RC522_ClearBitMask(Status2Reg,0x08);  //清RC522寄存器位 
    RC522_WriteRawRC(BitFramingReg,0x00); //寫
    RC522_ClearBitMask(CollReg,0x80);     //清
 
    ucComMF522Buf[0]=PICC_ANTICOLL1;   	 //PICC_ANTICOLL1 = 0x93
    ucComMF522Buf[1]=0x20;
	
    status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen); //0x0c,通過(guò)RC522和ISO14443卡通訊
											 //PCD_TRANSCEIVE =發(fā)送并接收數(shù)據(jù)
											 //2:寫入卡里的數(shù)據(jù)字節(jié)長(zhǎng)度
											 //ucComMF522Buf:存放數(shù)據(jù)的地址
											 //unLen:從卡里讀出的數(shù)據(jù)長(zhǎng)度
    if(status==MI_OK)
    {
    	 for(i=0;i<4;i++)
			 {   
					 *(pSnr+i)=ucComMF522Buf[i];  //把讀到的卡號(hào)賦值給pSnr
					 snr_check^=ucComMF522Buf[i];
			 }
			 if(snr_check!=ucComMF522Buf[i])
			 {
					status = MI_ERR;
			 }
    }   
    RC522_SetBitMask(CollReg,0x80);
    return status;
}
/*
功    能:選定卡片
參數(shù)說(shuō)明:pSnr[IN]:卡片序列號(hào),4字節(jié)
返    回:成功返回MI_OK
*/
char RC522_PcdSelect(u8 *pSnr)
{
    char status;
    u8 i;
    u8 unLen;
    u8 ucComMF522Buf[MAXRLEN]; 
    
    ucComMF522Buf[0]=PICC_ANTICOLL1;
    ucComMF522Buf[1]=0x70;
    ucComMF522Buf[6]=0;
	
    for(i=0;i<4;i++)
    {
    	ucComMF522Buf[i+2]=*(pSnr+i);
    	ucComMF522Buf[6]^=*(pSnr+i);
    }
		
    RC522_CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]); //用MF522計(jì)算CRC16函數(shù),校驗(yàn)數(shù)據(jù)
    RC522_ClearBitMask(Status2Reg,0x08);	                //清RC522寄存器位
    status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
    if((status==MI_OK)&&(unLen==0x18))status=MI_OK;
    else status=MI_ERR;
		
    return status;
}
/*
功    能:驗(yàn)證卡片密碼
參數(shù)說(shuō)明:auth_mode[IN]: 密碼驗(yàn)證模式
                 0x60 = 驗(yàn)證A密鑰
                 0x61 = 驗(yàn)證B密鑰 
          addr[IN]:塊地址
          pKey[IN]:扇區(qū)密碼
          pSnr[IN]:卡片序列號(hào),4字節(jié)
返    回:成功返回MI_OK
*/               
char RC522_PcdAuthState(u8 auth_mode,u8 addr,u8 *pKey,u8 *pSnr)
{
    char status;
    u8 unLen;
    u8 ucComMF522Buf[MAXRLEN];  //MAXRLEN  18(數(shù)組的大小)
	  
	  //驗(yàn)證模式+塊地址+扇區(qū)密碼+卡序列號(hào)   
    ucComMF522Buf[0]=auth_mode;		
    ucComMF522Buf[1]=addr;				
    memcpy(&ucComMF522Buf[2],pKey,6); //拷貝,復(fù)制
    memcpy(&ucComMF522Buf[8],pSnr,4); 
	 
    status=RC522_PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);
    if((status!= MI_OK)||(!(RC522_ReadRawRC(Status2Reg)&0x08)))status = MI_ERR;
    return status;
}
/*
功    能:讀取M1卡一塊數(shù)據(jù)
參數(shù)說(shuō)明: 
addr:塊地址
p   :讀出的塊數(shù)據(jù),16字節(jié)
返    回:成功返回MI_OK
*/ 
char RC522_PcdRead(u8 addr,u8 *p)
{
    char status;
    u8 unLen;
    u8 i,ucComMF522Buf[MAXRLEN]; //18

    ucComMF522Buf[0]=PICC_READ;
    ucComMF522Buf[1]=addr;
    RC522_CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
    status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);//通過(guò)RC522和ISO14443卡通訊
    if((status==MI_OK&&(unLen==0x90)))
    {
		for(i=0;i<16;i++)
		{
				*(p +i)=ucComMF522Buf[i];
		}
    }
    else
	{   
		status=MI_ERR;
	}
    return status;
}
/*
功    能:寫數(shù)據(jù)到M1卡指定塊
參數(shù)說(shuō)明:addr:塊地址
          p   :向塊寫入的數(shù)據(jù),16字節(jié)
返    回:成功返回MI_OK
*/                  
char RC522_PcdWrite(u8 addr,u8 *p)
{
    char status;
    u8 unLen;
    u8 i,ucComMF522Buf[MAXRLEN]; 
    
    ucComMF522Buf[0]=PICC_WRITE;// 0xA0 //寫塊
    ucComMF522Buf[1]=addr;      //塊地址
    RC522_CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
 
    status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

    if((status!= MI_OK)||(unLen != 4)||((ucComMF522Buf[0]&0x0F)!=0x0A))
	{
		status = MI_ERR;
	}
		
    if(status==MI_OK)
    {
        for(i=0;i<16;i++)//向FIFO寫16Byte數(shù)據(jù) 
        {    
        	ucComMF522Buf[i]=*(p +i);   
        }
        RC522_CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);
        status = RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);
        if((status != MI_OK)||(unLen != 4)||((ucComMF522Buf[0]&0x0F)!=0x0A))
		{   
			status = MI_ERR;   
		}
    }
    return status;
}
/*
功    能:命令卡片進(jìn)入休眠狀態(tài)
返    回:成功返回MI_OK
*/
char RC522_PcdHalt(void)
{
    u8 status;
    u8 unLen;
    u8 ucComMF522Buf[MAXRLEN]; //MAXRLEN==18
	status=status;
    ucComMF522Buf[0]=PICC_HALT;
    ucComMF522Buf[1]=0;
    RC522_CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
    status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    return MI_OK;
}
/*
功    能:用MF522計(jì)算CRC16函數(shù)
參    數(shù):
		*pIn :要讀數(shù)CRC的數(shù)據(jù)
		len:-數(shù)據(jù)長(zhǎng)度
		*pOut:計(jì)算的CRC結(jié)果
*/
void RC522_CalulateCRC(u8 *pIn ,u8 len,u8 *pOut )
{
    u8 i,n;
    RC522_ClearBitMask(DivIrqReg,0x04);  //CRCIrq = 0  
    RC522_WriteRawRC(CommandReg,PCD_IDLE);
    RC522_SetBitMask(FIFOLevelReg,0x80); //清FIFO指針
    
  //向FIFO中寫入數(shù)據(jù)  
	for(i=0;i
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 射頻
    +關(guān)注

    關(guān)注

    104

    文章

    5573

    瀏覽量

    167694
  • RFID
    +關(guān)注

    關(guān)注

    388

    文章

    6142

    瀏覽量

    237746
  • RC522
    +關(guān)注

    關(guān)注

    7

    文章

    56

    瀏覽量

    23976
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RC522 RFID實(shí)驗(yàn)的小系統(tǒng)板接線說(shuō)明

    6.RC522 RFID實(shí)驗(yàn)的小系統(tǒng)板接線說(shuō)
    發(fā)表于 11-22 16:36 ?0次下載

    Air780EP之RC522開發(fā)板,你了解嗎?

    ?本文講解合宙Air780EP開發(fā)RC522實(shí)例。 本文檔適用于Air780EP開發(fā)板; 關(guān)聯(lián)文檔和使用工具; rc522 - rc522
    的頭像 發(fā)表于 11-03 08:21 ?218次閱讀
    Air780EP之<b class='flag-5'>RC522</b><b class='flag-5'>開發(fā)</b>板,你了解嗎?

    4G通信先鋒:Air780EP開發(fā)板與RC522的結(jié)合

    最近,一直有朋友問(wèn)我Air780EP開發(fā)RC522, 今天抽空給大家展示一下示例: 本文檔適用于Air780EP開發(fā)板 關(guān)聯(lián)文檔和使用工具
    的頭像 發(fā)表于 10-29 14:29 ?159次閱讀
    4G通信先鋒:Air780EP<b class='flag-5'>開發(fā)</b>板與<b class='flag-5'>RC522</b>的結(jié)合

    低功耗4G模組:Air780EP開發(fā)RC522實(shí)例

    ? 本文講解合宙Air780EP開發(fā)RC522實(shí)例,文末【閱讀原文】獲取最新資料。 本文檔適用于Air780EP開發(fā)板 關(guān)聯(lián)文檔和使用工具 LuatOS-Soc固件獲取 https
    的頭像 發(fā)表于 10-21 17:01 ?232次閱讀
    低功耗4G模組:Air780EP<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>RC522</b>實(shí)例

    SI522A 與 恩智浦 RC522 刷卡對(duì)比

    模式下,芯片大部分時(shí)間處于休眠狀態(tài),由3K RC定時(shí)喚醒,以極低的功耗偵測(cè)13.56MHz的射頻場(chǎng)和射頻卡,檢測(cè)到場(chǎng)或卡自動(dòng)產(chǎn)生中斷并喚醒MCU。偵測(cè)場(chǎng)和卡的功能可以單獨(dú)使能,整個(gè)ACD過(guò)程不需要
    發(fā)表于 09-30 14:19

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    Linux系統(tǒng)中,驅(qū)動(dòng)程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們?cè)试S內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的控制和管理。 驅(qū)動(dòng)程序的編寫 驅(qū)動(dòng)
    的頭像 發(fā)表于 08-30 15:02 ?439次閱讀

    linux驅(qū)動(dòng)程序的編譯方法是什么

    Linux驅(qū)動(dòng)程序的編譯方法主要包括兩種: 與內(nèi)核一起編譯 和 編譯成獨(dú)立的內(nèi)核模塊 。以下是對(duì)這兩種方法的介紹: 一、與內(nèi)核一起編譯 與內(nèi)核一起編譯意味著將驅(qū)動(dòng)程序的源代碼直接集成到
    的頭像 發(fā)表于 08-30 14:46 ?535次閱讀

    Linux 驅(qū)動(dòng)開發(fā)與應(yīng)用開發(fā),你知道多少?

    一、Linux驅(qū)動(dòng)開發(fā)與應(yīng)用開發(fā)的區(qū)別開發(fā)層次不同:Linux
    的頭像 發(fā)表于 08-30 12:16 ?746次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>與應(yīng)用<b class='flag-5'>開發(fā)</b>,你知道多少?

    TJDZ-RC522 RFID讀卡模塊用戶操作手冊(cè)

    RC522讀卡模塊使用說(shuō)明
    發(fā)表于 06-19 14:32 ?1次下載

    RFID射頻識(shí)別中的高頻HF

    RFID,即 Radio Frequency Identification 射頻識(shí)別技術(shù),是一種非接觸式的自動(dòng)識(shí)別技術(shù),通過(guò)無(wú)線射頻方式進(jìn)行非接觸雙向數(shù)據(jù)通信, 對(duì)電子標(biāo)簽或射頻卡進(jìn)行
    發(fā)表于 05-08 11:31

    stm8l151C6 RC522物理SPI沒有SCK時(shí)鐘是怎么回事?

    , GPIO_Mode_In_PU_No_IT); //MISO BSP1_RFID_PowerOn();//給RC522芯片上電 //BSP1_RFID_PowerOff(); SPI_DeInit
    發(fā)表于 04-30 06:25

    SI522一款兼容RC522/FM17522 開發(fā)資料

    數(shù)據(jù)傳輸速率高達(dá)424kbit/s。 作為13.56MHz 高集成度讀寫卡系列芯片家族的新成員,MF RC522 與MF RC500和 MF RC530 有不少相似之處,同時(shí)也具備諸多特點(diǎn)和差異。它與
    發(fā)表于 02-29 15:56

    射頻識(shí)別RFID

    射頻識(shí)別(RFID) 是 Radio Frequency Identification 的縮寫。 射頻識(shí)別技術(shù)是自動(dòng)識(shí)別技術(shù)的,通過(guò)無(wú)線射頻方式進(jìn)行非接觸雙向數(shù)據(jù)通信,利用無(wú)線
    發(fā)表于 02-28 11:31

    mfrc522工作原理

    MFRC522是一種高度集成的射頻(RF)芯片,用于實(shí)現(xiàn)與常見射頻識(shí)別(RFID)標(biāo)簽的通信。它可以用于各種應(yīng)用,如門禁系統(tǒng)、智能交通系統(tǒng)、倉(cāng)庫(kù)管理等。在本文中,我們將詳細(xì)介紹MFRC
    的頭像 發(fā)表于 01-09 14:15 ?2004次閱讀

    rc522射頻模塊的工作原理

    RC522射頻模塊是一種基于射頻識(shí)別技術(shù)的讀卡器模塊,廣泛應(yīng)用于門禁系統(tǒng)、智能家居、智能卡類應(yīng)用等領(lǐng)域。它具備快速、穩(wěn)定、安全的特點(diǎn),能夠讀
    的頭像 發(fā)表于 12-28 16:27 ?5456次閱讀
    RM新时代网站-首页