在线时间109 小时
UID3332856
注册时间2016-11-28
NXP金币370
TA的每日心情 | 擦汗 2024-11-7 09:48 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
金牌会员
 
- 积分
- 1252
- 最后登录
- 2025-8-5
|
NFC门锁之二 启用NFC读卡器读取
1、使用NFC读卡器的功能,是使用采用I2C接口的ID-2LA, ID-12LA, ID-20LA模块实现的,这个模块采用专门的伪UART协议传输数据,NFC天线和处理数据都在封装的模块中,使用起来很方便,不过,采用I2C接口转换模板后,读取I2C数据就更方便了。
这个模块内置hex地址是7D,设置的速度是标准I2C速率。工作频率是125kHz的RFID,工作电压:2.8~5V DC,读取频率:125kHz,读取距离:120mm,采用RS-232的速率是9600bps。
2. 连接开发板的引出CN9接口,是专门的I2C接口,对照SCL和SDA连接好,如下图,
3. 开发程序是采用I2C master 轮询方式。读取NFC卡内数据成功,就输出到调试串口,如下,
读取前5个数据,就可以确定具体卡片数据,后面变化的数据是读卡器的时标,显示是不同的时间读取的两次数据,时标是自动添加的。
4. 详见参考范例程序。如下,
- #include <stdio.h>
- #include <string.h>
- #include "board.h"
- #include "fsl_debug_console.h"
- #include "fsl_i2c.h"
- #include "pin_mux.h"
- #define EXAMPLE_I2C_MASTER_BASE (I2C0_BASE)
- #define I2C_MASTER_CLOCK_FREQUENCY (12000000)
- #define WAIT_TIME 5000000U
- #define EXAMPLE_I2C_MASTER ((I2C_Type *)EXAMPLE_I2C_MASTER_BASE)
- #define I2C_MASTER_SLAVE_ADDR_7BIT 0x7DU
- #define I2C_BAUDRATE 100000U
- #define I2C_DATA_LENGTH 33U
- uint8_t g_master_txBuff[I2C_DATA_LENGTH];
- uint8_t g_master_rxBuff[I2C_DATA_LENGTH];
- int main(void)
- {
- i2c_master_config_t masterConfig;
- status_t reVal = kStatus_Fail;
- uint8_t deviceAddress = 0x01U;
- CLOCK_Select(kUART0_Clk_From_MainClk);
- CLOCK_Select(kI2C0_Clk_From_MainClk);
- BOARD_InitPins();
- BOARD_InitBootClocks();
- BOARD_InitDebugConsole();
- PRINTF("\r\nI2C board2board polling example -- Master transfer.\r\n");
-
- g_master_txBuff[0] = I2C_DATA_LENGTH - 1U;
- for (uint32_t i = 1U; i < I2C_DATA_LENGTH; i++)
- {
- g_master_txBuff[i] = i - 1;
- }
-
- I2C_MasterGetDefaultConfig(&masterConfig);
- masterConfig.baudRate_Bps = I2C_BAUDRATE;
- /* Initialize the I2C master peripheral */
- I2C_MasterInit(EXAMPLE_I2C_MASTER, &masterConfig, I2C_MASTER_CLOCK_FREQUENCY);
-
- PRINTF("Receive sent data from slave :");
- while (1)
- {
- for (uint32_t i = 0U; i < WAIT_TIME; i++)
- { __NOP(); }
-
- if (kStatus_Success == I2C_MasterStart(EXAMPLE_I2C_MASTER, I2C_MASTER_SLAVE_ADDR_7BIT, kI2C_Write))
- {
- reVal = I2C_MasterWriteBlocking(EXAMPLE_I2C_MASTER, &deviceAddress, 1, kI2C_TransferNoStopFlag);
- if (reVal != kStatus_Success)
- {
- return -1;
- }
- reVal = I2C_MasterRepeatedStart(EXAMPLE_I2C_MASTER, I2C_MASTER_SLAVE_ADDR_7BIT, kI2C_Read);
- if (reVal != kStatus_Success)
- {
- return -1;
- }
- reVal =
- I2C_MasterReadBlocking(EXAMPLE_I2C_MASTER, g_master_rxBuff, I2C_DATA_LENGTH - 1, kI2C_TransferDefaultFlag);
- if (reVal != kStatus_Success)
- {
- return -1;
- }
- reVal = I2C_MasterStop(EXAMPLE_I2C_MASTER);
- if (reVal != kStatus_Success)
- {
- return -1;
- }
- }
- for (uint32_t i = 0U; i < I2C_DATA_LENGTH - 1; i++)
- {
- if (i % 8 == 0)
- {
- PRINTF("\r\n");
- }
- PRINTF("0x%2x ", g_master_rxBuff[i]);
- }
- PRINTF("\r\n\r\n");
-
- } // End of While Loop
- }
复制代码
5.判定可用的数据成功就可以启动门锁启动程序,这个也就是大家常见的NFC读卡器开门过程,当测试这个卡片授权通过,就发出一个ON的信号,驱动吸合磁铁释放门吸,打开门锁。过一段时间延迟后,再次OFF,关门。
|
|