MFRC522模块开发笔记

Write_to_Card(…)和Read_from_Card(…)可谓是所有函数的终点,而SPIWriteByte(…)则是最底层对MFRC522模块进行操作的函数,所有函数都是为了Write_to_Card(…)和Read_from_Card(…)而产生的。因此,我们只需要调用这两个函数就可以完成IC卡的读写,同时,这两个函数的参数和使用方法都是一样的,是不是很简单!


虽然说可以直接把我们的程序拿来用应一下急,但作为嵌入式开发者,我们建议还是需要了解这些程序是怎么来的,下面我们就来讲讲程序的组成架构和函数的功能原理。在讲程序之前,我们需要将IC卡的结构给大家讲清楚,看下图:


上图是IC卡中的存储区结构。Mifare卡片的存储容量为8192×1位字长(即1K * 8位字长),采用E2PROM作为存储介质。整个结构划分为16个扇区,编为扇区0~15。每个扇区有4个块(Block),分别为块0,块1,块2和块3。每个块有16个字节。一个扇区共有16Byte* 4 = 64Byte。每个扇区的块3(即第四块)也称作尾块,包含了该扇区的密码A(6个字节)、存取控制(4个字节)、密码B(6 个字节)。其余三个块是一般的数据块。

每个扇区的块3(即第四块)也称作尾块,包含了该扇区的密码A(6个字节)、存取控制(4个字节)、密码B(6个字节)。其余三个块是一般的数据块。扇区0的块0是特殊的块,包含了厂商代码信息,在生产卡片时写入,不可改写。其中:第0~4个字节为卡片的序列号,第5个字节为序列号的校验码;第6个字节为卡片的容量“SIZE”字节;第7、8个字节为卡片的类型号字节,即Tagtype字节;其他字节由厂商另加定义。

综上所述,我们可以用来存储数据的空间为第一扇区的第1、2块,第二扇区到第63扇区的第0、1、2块,简而言之就是我们上图中的“数据块”。

M1卡结构
共16个扇区,每个扇区4块(块0~3),共64块,按块号编址为0~63。
第0扇区的块0(即绝对地址0块)用于存放厂商代码,已经固化,不可更改。
其他各扇区:
块0、块1、块2为数据块,用于存贮数据;
块3为控制块,存放密码A、存取控制、密码B。


因此,只要做出一个接口,即设计一个函数,让我们指定要在哪个块上输入什么数据就好了,块的数据范围是0到63,写入的数据的格式为16个字节,如:ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff,我们设定一个数组来存储这个数据:Write_Data[16] = {0x00};
      我们设计了一个函数:Write_to_Card(kuai,Write_Data);其中,kuai就是指定是哪个块,Write_Data是指要写入的数据,就是上面所说数组的起始地址,只要事先对这两个变量进行赋值,就可以轻松向IC卡中写入数据了,我们设计了另一个函数Read_from_Card(kuai,Read_Data);kuai是指要操作的块,Read_Data就是从这个块中读取出来的数据的存放地,有了数据,不管是在lcd1602还是lcd12864或者是tft液晶显示都没什么问题了。

现在让我们看看Write_to_Card(…)和Read_from_Card(…)的使用方法:

void main()

{

         Write_Data[0] = 0x33;                                //需要写入IC卡中的数据赋值

         init();                                 //串口通信初始化

         while(1)

         {

                   Write_to_Card(0x01,Write_Data);    //向IC卡中的0x01块存储区中写数据

                   delay_welcome(100);

                   Read_from_Card(0x01,Read_Data);   //从IC卡中的0x01块存储区中读数据      

         }

}

这是Mian函数程序.


读写卡的时间是短暂的,而人刷卡时,卡在读卡器读卡范围内的时间相对较长,这就涉及到一次读卡和重复读卡的问题了,我们的程序设计的是一次读卡,也就是说你不管把卡放在读卡器上多长时间,系统只读写一次卡,串口调试助手不会重复显示一样的数据,这个功能可不是所有淘宝店可以提供的哦。下面我们来看看程序:

//IC卡中写数据

unsigned charWrite_to_Card(unsigned char data KuaiN,unsigned char *pData) 

{

         char data status;

         unsigned char idata RevBuffer[4];

         unsigned char data MLastSelectedSnr[4];

         unsigned char dataPassWd[6]={0xff,0xff,0xff,0xff,0xff,0xff};

         unsigned char data place = 0x00;

         PcdReset();

//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节

         status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);

         if(status!=MI_OK)

         {

                  flag = 0;

                   green = 1;

                   return 0x00;

         }

//判断当操作卡完成后就停止重复读写卡

         if(flag == 1)                                

         { 

                   return 0x00;

         }

//防冲撞,返回卡的序列号 4字节

         status=PcdAnticoll(&RevBuffer[2]);

         if(status!=MI_OK)

         {       

                   return 0x00;

         }                         

         memcpy(MLastSelectedSnr,&RevBuffer[2],4); //拷贝序列号到变量MLastSelectedSnr

//选卡,卡号为MLastSelectedSnr

         status=PcdSelect(MLastSelectedSnr);

         if(status!=MI_OK)

         {

                   return 0;

         }

         //验证卡片密码,空白卡都是0xff,0xff,0xff,0xff,0xff,0xff

         status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);

         if(status!=MI_OK)

         {

                   return 0x00;

         }

//向卡中指定块中写数据

         status=PcdWrite(KuaiN,pData); 

         if(status!=MI_OK)             

                   return 0;

         }

//命令卡片进入休眠状态

         PcdHalt();

         flag = 1;

         green = 0;

         return 1;

}

//IC卡中读数据

unsigned char Read_from_Card(unsigned char data KuaiN,unsigned char *pData) 

{

         char data status;

         unsigned char idata RevBuffer[4];

         unsigned char data MLastSelectedSnr[4];

         unsigned char dataPassWd[6]={0xff,0xff,0xff,0xff,0xff,0xff};

         unsigned char data place = 0x00;

         PcdReset();

//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节

         status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);

         if(status!=MI_OK)

         {

                   flag = 0;

                   green = 1;

                   return 0x00;

         }

//判断当操作卡完成后就停止重复读写卡

         if(flag == 1)                                

         { 

                   return 0x00;

         }

//防冲撞,返回卡的序列号 4字节

         status=PcdAnticoll(&RevBuffer[2]);

         if(status!=MI_OK)

         {       

                   return 0x00;

         }                         

         memcpy(MLastSelectedSnr,&RevBuffer[2],4); //拷贝序列号到变量MLastSelectedSnr

//选卡,卡号为MLastSelectedSnr

         status=PcdSelect(MLastSelectedSnr);

         if(status!=MI_OK)

         {

                   return 0;

         }

         //验证卡片密码,空白卡都是0xff,0xff,0xff,0xff,0xff,0xff

         status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);

         if(status!=MI_OK)

         {

                   return 0x00;

         }

//从卡中对应块中读取数据,注意,一次读出整块数据,即16字节

         status= PcdRead (KuaiN,pData);

         if(status!=MI_OK)             

                   return 0;

         }       

//命令卡片进入休眠状态

         PcdHalt();

         flag = 1;

         green = 0;

         //如果程序走到这一步,就说明读卡成功,并且pData指定人数组中存放着块数据

         //我们可以通过下面的函数向PC机传送卡里的数据

Serial_Rs232(pData,16);

         return 1;

}


程序的函数关系:

Main()

|---- Write_to_Card(…);     //写卡

|         |---- PcdRequest(…);  //寻天线区内未进入休眠状态的卡

|         |        |--- ClearBitMask(…)

|         |        |       |--- ReadRawRC(…)

|         |        |       |       |---SPIWriteByte(…)

|         |        |       |       |---SPIReadByte(…)

|         |       |        |--- WriteRawRC(…)

|         |        |                |---SPIWriteByte(…)

|         |        |--- WriteRawRC(…)

|         |        |       |--- SPIWriteByte(…)

|         |        |--- SetBitMask(…)

|         |        |       |--- ReadRawRC (…)

|         |        |       |       |---SPIWriteByte(…)

|         |        |       |       |---SPIReadByte(…)

|         |        |       |--- WriteRawRC (…)

|         |        |       |       |---SPIWriteByte(…)

|         |        |--- PcdComMF522

|         |                 |--- WriteRawRC (…)

|         |                         |---SPIWriteByte(…)

|         |                 |--- ClearBitMask (…)

|         |                 |       |--- ReadRawRC(…)

|         |                 |       |      |---SPIWriteByte(…)

|         |                 |       |      |---SPIReadByte(…)

|         |                 |       |--- WriteRawRC(…)

|         |                 |               |---SPIWriteByte(…)

|         |                 |--- SetBitMask (…)

|         |                 |       |--- ReadRawRC (…)

|         |                 |       |      |---SPIWriteByte(…)

|         |                 |       |      |---SPIReadByte(…)

|         |                 |       |--- WriteRawRC (…)

|         |                |       |      |---SPIWriteByte(…)

|         |                 |--- ReadRawRC(…)

|         |                         |---SPIWriteByte(…)

|         |---- PcdAnticoll(…)

|         |        |--- ClearBitMask (…)

|         |        |       |       |--- ReadRawRC(…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC(…)

|         |        |       |               |---SPIWriteByte(…)

|         |        |--- WriteRawRC (…)

|         |        |       |---SPIWriteByte(…)

|         |        |--- PcdComMF522 (…)

|         |        |       |--- WriteRawRC (…)

|         |        |       |       |---SPIWriteByte(…)

|         |        |       |--- ClearBitMask (…)

|         |       |        |      |--- ReadRawRC(…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC(…)

|         |        |       |               |---SPIWriteByte(…)

|         |        |       |--- SetBitMask (…)

|         |        |       |       |--- ReadRawRC (…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC (…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |--- ReadRawRC(…)

|         |       |                |---SPIWriteByte(…)

|         |        |--- SetBitMask (…)

|         |        |      |--- ReadRawRC (…)

|         |        |      |       |---SPIWriteByte(…)

|         |        |      |       |---SPIReadByte(…)

|         |        |      |--- WriteRawRC (…)

|         |        |      |       |---SPIWriteByte(…)

|         |----PcdSelect(…)

|         |        |--- CalulateCRC (…)

|         |        |       |--- WriteRawRC (…)

|         |        |       |       |---SPIWriteByte(…)

|         |        |       |--- ClearBitMask (…)

|         |       |        |      |--- ReadRawRC(…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC(…)

|         |        |       |               |---SPIWriteByte(…)

|         |        |       |--- SetBitMask (…)

|         |        |       |       |--- ReadRawRC (…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC (…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |--- ReadRawRC(…)

|         |       |                |---SPIWriteByte(…)

|         |        |--- ClearBitMask (…)

|         |        |       |       |--- ReadRawRC(…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC(…)

|         |        |       |               |---SPIWriteByte(…)

|         |        |--- PcdComMF522 (…)

|         |        |       |--- WriteRawRC (…)

|         |        |       |       |---SPIWriteByte(…)

|         |        |       |--- ClearBitMask (…)

|         |       |        |      |--- ReadRawRC(…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |       |        |       |--- WriteRawRC(…)

|         |        |       |               |---SPIWriteByte(…)

|         |        |       |--- SetBitMask (…)

|         |        |       |       |--- ReadRawRC (…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC (…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |--- ReadRawRC(…)

|         |        |                |---SPIWriteByte(…)

|         |----PcdAuthState (…)

|         |        |--- PcdComMF522 (…)

|         |        |       |--- WriteRawRC (…)

|         |        |       |       |---SPIWriteByte(…)

|         |       |        |--- ClearBitMask (…)

|         |       |        |      |--- ReadRawRC(…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC(…)

|         |        |       |               |---SPIWriteByte(…)

|         |        |       |--- SetBitMask (…)

|         |        |       |       |--- ReadRawRC (…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |       |       |---SPIReadByte(…)

|         |        |       |       |--- WriteRawRC (…)

|         |        |       |       |       |---SPIWriteByte(…)

|         |        |       |--- ReadRawRC(…)

|         |        |                |---SPIWriteByte(…)

|         |        |--- ReadRawRC (…)

|         |        |        |---SPIWriteByte(…)

|         |        |       |---SPIReadByte(…)

|         |        |--- PcdWrite (…)

|         |                 |---CalulateCRC(…)

|         |                 |       |--- WriteRawRC (…)

|         |                 |       |       |---SPIWriteByte(…)

|         |                 |       |--- ClearBitMask (…)

|         |                |        |       |--- ReadRawRC(…)

|         |                 |       |       |       |---SPIWriteByte(…)

|         |                 |       |       |       |---SPIReadByte(…)

|         |                 |       |       |--- WriteRawRC(…)

|         |                 |        |               |---SPIWriteByte(…)

|         |                 |       |--- SetBitMask (…)

|         |                 |       |       |--- ReadRawRC (…)

|         |                 |        |      |      |---SPIWriteByte(…)

|         |                 |       |       |      |---SPIReadByte(…)

|         |                 |       |       |--- WriteRawRC (…)

|         |                 |       |       |       |---SPIWriteByte(…)

|         |                 |       |--- ReadRawRC(…)

|         |                 |        |      |---SPIWriteByte(…)

|         |                 |---PcdComMF522(…)

|         |                 |       |--- WriteRawRC (…)

|         |                 |       |       |---SPIWriteByte(…)

|         |                 |       |--- ClearBitMask (…)

|         |                |       |       |--- ReadRawRC(…)

|         |                 |       |       |       |---SPIWriteByte(…)

|         |                 |       |       |       |---SPIReadByte(…)

|         |                 |       |       |--- WriteRawRC(…)

|         |                 |       |               |---SPIWriteByte(…)

|         |                 |       |--- SetBitMask (…)

|         |                 |       |       |--- ReadRawRC (…)

|         |                |       |       |       |---SPIWriteByte(…)

|         |                 |       |       |       |---SPIReadByte(…)

|         |                 |       |       |--- WriteRawRC (…)

|         |                 |       |       |       |---SPIWriteByte(…)

|         |                 |       |--- ReadRawRC(…)

|         |                 |                |---SPIWriteByte(…)

|         |----PcdHalt (…)     |

|                          |---CalulateCRC (…)

|                 |         |--- WriteRawRC (…)

|                 |         |       |---SPIWriteByte(…)

|                 |         |--- ClearBitMask (…)

|                 |         |        |---ReadRawRC(…)

|                 |         |       |       |---SPIWriteByte(…)

|                 |         |       |       |---SPIReadByte(…)

|                 |         |       |--- WriteRawRC(…)

|                 |         |        |      |---SPIWriteByte(…)

|                 |         |--- SetBitMask (…)

|                 |         |      |--- ReadRawRC (…)

|                 |         |       |      |---SPIWriteByte(…)

|                 |         |      |       |---SPIReadByte(…)

|                 |         |      |--- WriteRawRC (…)

|                 |         |      |       |---SPIWriteByte(…)

|                 |         |--- ReadRawRC(…)

|                 |         |      |---SPIWriteByte(…)

|                 |---PcdComMF522 (…)

|                           |--- WriteRawRC (…)

|                           |       |---SPIWriteByte(…)

|                           |--- ClearBitMask (…)

|                           |       |--- ReadRawRC(…)

|                           |       |      |---SPIWriteByte(…)

|                           |      |       |---SPIReadByte(…)

|                           |      |--- WriteRawRC(…)

|                           |               |---SPIWriteByte(…)

|                           |--- SetBitMask (…)

|                           |      |--- ReadRawRC (…)

|                           |      |       |---SPIWriteByte(…)

|                           |      |       |---SPIReadByte(…)

|                           |      |--- WriteRawRC (…)

|                           |      |       |---SPIWriteByte(…)

|                           |--- ReadRawRC(…)

|                                   |---SPIWriteByte(…)

|

|----delay_welcome(100);

|----Read_from_Card(…)

         |---- PcdRequest(…);  //寻天线区内未进入休眠状态的卡

         |        |--- ClearBitMask(…)

         |        |       |--- ReadRawRC(…)

         |        |       |       |---SPIWriteByte(…)

         |        |       |       |---SPIReadByte(…)

         |        |       |--- WriteRawRC(…)

         |        |                |---SPIWriteByte(…)

         |        |--- WriteRawRC(…)

         |        |       |--- SPIWriteByte(…)

         |        |--- SetBitMask(…)

         |        |       |--- ReadRawRC (…)

         |        |       |       |---SPIWriteByte(…)

         |        |       |       |---SPIReadByte(…)

         |        |       |--- WriteRawRC (…)

         |        |       |       |---SPIWriteByte(…)

         |        |--- PcdComMF522

         |                 |--- WriteRawRC (…)

         |                         |---SPIWriteByte(…)

         |                 |--- ClearBitMask (…)

         |                |       |--- ReadRawRC(…)

         |                 |       |      |---SPIWriteByte(…)

         |                 |       |      |---SPIReadByte(…)

         |                 |       |--- WriteRawRC(…)

         |                 |               |---SPIWriteByte(…)

         |                 |--- SetBitMask (…)

         |                 |       |--- ReadRawRC (…)

         |                 |       |      |---SPIWriteByte(…)

         |                 |       |      |---SPIReadByte(…)

         |                 |       |--- WriteRawRC (…)

         |                 |       |      |---SPIWriteByte(…)

         |                 |--- ReadRawRC(…)

         |                         |---SPIWriteByte(…)

         |---- PcdAnticoll(…)

         |        |--- ClearBitMask (…)

         |        |       |       |--- ReadRawRC(…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |       |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC(…)

         |        |       |               |---SPIWriteByte(…)

         |        |--- WriteRawRC (…)

         |        |       |---SPIWriteByte(…)

         |        |--- PcdComMF522 (…)

         |        |       |--- WriteRawRC (…)

         |        |       |       |---SPIWriteByte(…)

         |        |       |--- ClearBitMask (…)

         |       |        |      |--- ReadRawRC(…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |        |      |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC(…)

         |        |       |               |---SPIWriteByte(…)

         |        |       |--- SetBitMask (…)

         |        |       |       |--- ReadRawRC (…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |       |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC (…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |--- ReadRawRC(…)

         |        |                |---SPIWriteByte(…)

         |        |--- SetBitMask (…)

         |        |      |--- ReadRawRC (…)

         |        |      |       |---SPIWriteByte(…)

         |        |      |       |---SPIReadByte(…)

         |        |      |--- WriteRawRC (…)

         |        |      |       |---SPIWriteByte(…)

         |----PcdSelect(…)

         |        |--- CalulateCRC (…)

         |        |       |--- WriteRawRC (…)

         |        |       |       |---SPIWriteByte(…)

         |        |       |--- ClearBitMask (…)

         |       |        |      |--- ReadRawRC(…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |       |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC(…)

         |        |       |               |---SPIWriteByte(…)

         |        |       |--- SetBitMask (…)

         |        |       |       |--- ReadRawRC (…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |       |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC (…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |--- ReadRawRC(…)

         |        |                |---SPIWriteByte(…)

         |        |--- ClearBitMask (…)

         |        |       |       |--- ReadRawRC(…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |       |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC(…)

         |        |       |               |---SPIWriteByte(…)

         |        |--- PcdComMF522 (…)

         |        |       |--- WriteRawRC (…)

         |        |       |       |---SPIWriteByte(…)

         |        |       |--- ClearBitMask (…)

         |       |        |      |--- ReadRawRC(…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |        |      |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC(…)

         |        |       |               |---SPIWriteByte(…)

         |        |       |--- SetBitMask (…)

         |        |       |       |--- ReadRawRC (…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |       |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC (…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |--- ReadRawRC(…)

         |        |                |---SPIWriteByte(…)

         |----PcdAuthState (…)

         |        |--- PcdComMF522 (…)

         |        |       |--- WriteRawRC (…)

         |        |       |       |---SPIWriteByte(…)

         |        |       |--- ClearBitMask (…)

         |       |        |      |--- ReadRawRC(…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |       |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC(…)

         |        |       |               |---SPIWriteByte(…)

         |        |       |--- SetBitMask (…)

         |        |       |       |--- ReadRawRC (…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |       |       |---SPIReadByte(…)

         |        |       |       |--- WriteRawRC (…)

         |        |       |       |       |---SPIWriteByte(…)

         |        |       |--- ReadRawRC(…)

         |        |                |---SPIWriteByte(…)

         |        |--- ReadRawRC (…)

         |        |        |---SPIWriteByte(…)

         |        |       |---SPIReadByte(…)

         |        |--- PcdWrite (…)

         |                 |---CalulateCRC(…)

         |                 |       |--- WriteRawRC (…)

         |                 |       |       |---SPIWriteByte(…)

         |                 |       |--- ClearBitMask (…)

         |                |        |       |--- ReadRawRC(…)

         |                 |       |       |       |---SPIWriteByte(…)

          |                 |       |       |       |---SPIReadByte(…)

         |                 |       |       |--- WriteRawRC(…)

         |                 |        |               |---SPIWriteByte(…)

         |                 |       |--- SetBitMask (…)

         |                 |       |       |--- ReadRawRC (…)

         |                 |        |      |      |---SPIWriteByte(…)

         |                 |       |       |       |---SPIReadByte(…)

         |                 |       |       |--- WriteRawRC (…)

         |                 |       |       |       |---SPIWriteByte(…)

         |                 |       |--- ReadRawRC(…)

         |                |        |      |---SPIWriteByte(…)

         |                 |---PcdComMF522(…)

         |                 |       |--- WriteRawRC (…)

         |                 |       |       |---SPIWriteByte(…)

         |                 |       |--- ClearBitMask (…)

         |                |       |       |--- ReadRawRC(…)

         |                 |       |       |       |---SPIWriteByte(…)

         |                 |       |       |       |---SPIReadByte(…)

         |                |       |       |--- WriteRawRC(…)

         |                 |       |               |---SPIWriteByte(…)

         |                 |       |--- SetBitMask (…)

         |                 |       |       |--- ReadRawRC (…)

         |                |       |       |       |---SPIWriteByte(…)

         |                 |       |       |       |---SPIReadByte(…)

         |                 |       |       |--- WriteRawRC (…)

         |                 |       |       |       |---SPIWriteByte(…)

         |                 |       |--- ReadRawRC(…)

         |                 |                |---SPIWriteByte(…)

         |----PcdHalt (…)     |

                   |---CalulateCRC(…)

                 |         |--- WriteRawRC (…)

                 |         |       |---SPIWriteByte(…)

                 |         |--- ClearBitMask (…)

                 |         |        |---ReadRawRC(…)

                 |         |       |       |---SPIWriteByte(…)

                 |         |       |       |---SPIReadByte(…)

                 |         |       |--- WriteRawRC(…)

                 |         |        |      |---SPIWriteByte(…)

                 |         |--- SetBitMask (…)

                 |         |      |--- ReadRawRC (…)

                 |         |       |      |---SPIWriteByte(…)

                 |         |      |       |---SPIReadByte(…)

                 |         |      |--- WriteRawRC (…)

                 |         |      |       |---SPIWriteByte(…)

                 |         |--- ReadRawRC(…)

                 |         |      |---SPIWriteByte(…)

                 |---PcdComMF522 (…)

                           |--- WriteRawRC (…)

                           |       |---SPIWriteByte(…)

                           |--- ClearBitMask (…)

                           |       |--- ReadRawRC(…)

                           |       |      |---SPIWriteByte(…)

                           |      |       |---SPIReadByte(…)

                           |      |--- WriteRawRC(…)

                           |               |---SPIWriteByte(…)

                           |--- SetBitMask (…)

                           |      |--- ReadRawRC (…)

                           |      |       |---SPIWriteByte(…)

                           |      |       |---SPIReadByte(…)

                           |      |--- WriteRawRC (…)

                           |      |       |---SPIWriteByte(…)

                           |--- ReadRawRC(…)

                                   |---SPIWriteByte(…)

原文地址:https://www.cnblogs.com/alan666/p/8312313.html