大家好,今天主要聊一聊,如何使用鴻蒙系統中的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晶片。
第四: 軟體設計
主代碼分析
這部分代碼為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!