天天看點

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!