天天看点

HarmonyOS系统中内核实现NFC无线通信的方法

       大家好,今天主要聊一聊,如何使用鸿蒙系统中的NFC视频通信方法。

HarmonyOS系统中内核实现NFC无线通信的方法

目录

​​第一:NFC基本简介​​

​​第二:鸿蒙系统中API分析​​

​​第三:硬件设计​​

​​第四: 软件设计​​

​​第五:编译调试​​

​​第六:运行结果​​

第一:NFC基本简介

nfc简介:nfc即近距离无线通讯技术。这个技术由非接触式射频识别(RFID)演变而来,由飞利浦​​半导体​​​(现​​恩智浦半导体​​公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。近场通信(NearFieldCommunicaTIon,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于10厘米距离内。其传输速度有106Kbit/秒、212Kbit/秒或者424Kbit/秒三种。目前近场通信已通过成为ISO/IECIS18092国际标准、ECMA-340标准与ETSITS102190标准。NFC采用主动和被动两种读取模式。

NFC近场通信技术是由非接触式射频识别(RFID)及互联互通技术整合演变而来,在单一​​芯片​​上结合感应式读卡器、感应式卡片和点对点的功能,能在短距离内与兼容设备进行识别和数据交换。工作频率为13.56MHz,但是使用这种手机支付方案的用户必须更换特制的手机。目前这项技术在日韩被广泛应用,他们的手机可以用作机场登机验证、大厦的门禁钥匙、交通一卡通、信用卡、支付卡等。

第二:鸿蒙系统中API分析

     主要使用I2C完成采用的功能。

    I2cInit()

unsigned int I2cInit (WifiIotI2cIdx id, unsigned int baudrate )      

功能描述:

    用指定的频率初始化I2C设备

参数:

名字 描述
id I2C设备ID.
baudrate I2C频率

I2cSetBaudrate()

unsigned int I2cSetBaudrate (WifiIotI2cIdx id, unsigned int baudrate )      

功能描述:

   为I2C设备设置频率

参数:

名字 描述
id I2C设备ID.
baudrate I2C频率

I2cWrite()

unsigned int I2cWrite (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData * i2cData )      

功能描述:

   将数据写入I2C设备

参数:

名字 描述
id I2C设备ID.
deviceAddr I2C设备地址
i2cData 表示写入的数据

I2cRead()

unsigned int I2cRead (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData * i2cData )      

功能描述:

    从I2C设备读取数据。读取的数据将保存到i2cData指定的地址

参数:

名字 描述
id I2C设备ID.
deviceAddr I2C设备地址
i2cData 表示要读取的数据指向的指针

第三:硬件设计

    如下图,NFC芯片使用的是I2C协议,I2C_SCL与GPIO_0相连接,I2C_SDA与GPIO_1相连接,所以需要编写软件使用GPIO_0和GPIO_1产生I2C信号去控制NFC芯片。

HarmonyOS系统中内核实现NFC无线通信的方法

第四: 软件设计

   主代码分析

这部分代码为I2C初始化的代码,首先用 ​

​IoSetFunc()​

​​ 函数将GPIO_0复用为I2C1_SDA,GPIO_1复用为I2C1_SCL。然后调用I2cInit()函数初始化I2C1端口,最后使用 ​

​I2cSetBaudrate()​

​ 函数设置I2C1的频率为400kbps。

IoSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA);   // GPIO_0复用为I2C1_SDA
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL);   // GPIO_1复用为I2C1_SCL
I2cInit(WIFI_IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */
I2cSetBaudrate(WIFI_IOT_I2C_IDX_1, 400000);      

这部分的代码是向NFC芯片写入数据,但需要写入2个记录时,第2个记录的位置需要用​

​NDEFLastPos​

​​来定义;当需要写入3个记录时,第2个和第3个记录的位置分别需要用​

​NDEFMiddlePos​

​​和​

​NDEFLastPos​

​来定义。

ret=storeText(NDEFFirstPos, (uint8_t *)TEXT);
if(ret != 1)
{
    printf("NFC Write Data Falied :%d ",ret);
}
ret=storeUrihttp(NDEFLastPos, (uint8_t *)WEB);
if(ret != 1)
{
    printf("NFC Write Data Falied :%d ",ret);
}      

第五:编译调试

#"B1_basic_led_blink:led_example",
#"B2_basic_button:button_example",
#"B3_basic_pwm_led:pwm_example",
#"B4_basic_adc:adc_example",
"B5_basic_i2c_nfc:i2c_example",
#"B6_basic_uart:uart_example",      

第六:运行结果

=======================================

***********I2C_NFC_example**********

=======================================

Please use the mobile phone with NFC function close to the development board!

=======================================

***********I2C_NFC_example**********

=======================================

Please use the mobile phone with NFC function close to the development board!