精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于瑞芯微RK2206芯片+Harmony LiteOS操作系統的NFC控制案例

電子發燒友開源社區 ? 來源:HarmonyOS官方合作社區 ? 作者:HarmonyOS官方合作社 ? 2022-04-21 08:47 ? 次閱讀

一、簡介

NFC英文全稱Near Field Communication,近距離無線通信。是由飛利浦公司發起,由諾基亞、索尼等著名廠商聯合主推的一項無線技術。NFC由非接觸式射頻識別(RFID)及互聯互通技術整合演變而來,在單一芯片上結合感應式讀卡器、感應式卡片和點對點的功能,能在短距離內與兼容設備進行識別和數據交換。這項技術最初只是RFID技術和網絡技術的簡單合并,現在已經演變成一種短距離無線通信技術,發展態勢相當迅速。與RFID不同的是,NFC具有雙向連接和識別的特點,工作于13.56MHz頻率范圍,作用距離10厘米左右。NFC技術在ISO 18092、ECMA 340和ETSI TS 102 190框架下推動標準化,同時也兼容應用廣泛的ISO 14443 Type-A、B以及Felica標準非接觸式智能卡的基礎架構。

NFC芯片裝在手機上,手機就可以實現小額電子支付和讀取其他NFC設備或標簽信息。NFC的短距離交互大大簡化整個認證識別過程,使電子設備間互相訪問更直接、更安全和更清楚。通過NFC,電腦數碼相機、手機、PDA等多個設備之間可以很方便快捷地進行無線連接,進而實現數據交換和服務。

本文基于瑞芯微RK2206芯片 + Harmony LiteOS操作系統,通過i2c總線控制NFC,實現手機和開發板的互相通信功能。

4dcd2f28-c10b-11ec-bce3-dac502259ad0.png

二、硬件電路設計

模塊整體硬件電路如下圖所示,電路中包含了NFC。電路比較簡單,這邊不對電路進行說明。

4e34570c-c10b-11ec-bce3-dac502259ad0.png

圖1硬件電路圖

三、程序設計

NFC是一種近距離無線通訊技術,使用NFC技術的設備(如智能手機)可以在彼此靠近的情況下進行數據交換,是通過在單一芯片上集成感應式讀卡器、感應式卡片和點對點通信的功能,利用移動終端實現移動支付、門禁、移動身份識別等。

與以往設備配網技術相比,NFC"碰一碰"方案可以支持NFC功能的安卓手機iOS 13.0以上系統的iPhone使用,為消費客戶提供高效便捷的智慧生活無縫體驗。

1、主程序設計

如圖所示為NFC碰一碰主程序流程圖,開機LiteOS系統初始化后,進入主程序后先初始化I2C總線,然后控制I2C總線往NFC寫入一段文本信息和一段網址信息,最后拿支持NFC功能的安卓手機或iOS 13.0以上系統的iPhone靠近小凌派-RK2206開發板,就可以識別出一段文本信息和一個網址。

4e4c3246-c10b-11ec-bce3-dac502259ad0.png

圖2主程序流程圖

void nfc_process(void){  unsigned int ret = 0;
  /* 初始化NFC設備 */nfc_init();
  ret = nfc_store_text(NDEFFirstPos, (uint8_t *)TEXT);  if (ret != 1) {    printf("NFC Write Text Failed: %d
", ret);}
  ret = nfc_store_uri_http(NDEFLastPos, (uint8_t *)WEB);  if (ret != 1) {    printf("NFC Write Url Failed: %d
", ret);  }    while (1) {    printf("==============NFC Example==============
");    printf("Please use the mobile phone with NFC function close to the development board!
");    printf("

");    LOS_Msleep(1000);  }}

(左右移動查看全部內容)

2、NFC初始化程序設計

NFC碰一碰初始化主要包括I2C總線初始化。

/* NFC使用i2c的總線ID */static unsigned int NFC_I2C_PORT = 2;
/* i2c配置 */static I2cBusIo m_i2c2m0 ={  .scl = {.gpio = GPIO0_PD6, .func = MUX_FUNC1, .type = PULL_NONE, .drv = DRIVE_KEEP, .dir = LZGPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},  .sda = {.gpio = GPIO0_PD5, .func = MUX_FUNC1, .type = PULL_NONE, .drv = DRIVE_KEEP, .dir = LZGPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},  .id = FUNC_ID_I2C2,  .mode = FUNC_MODE_M0,};/* i2c的時鐘頻率 */static unsigned int m_i2c2_freq = 400000;
unsigned int NT3HI2cInit(){  uint32_t *pGrf = (uint32_t *)0x41050000U;  uint32_t ulValue;    ulValue = pGrf[7];  ulValue &= ~((0x7 << 8) | (0x7 << 4));  ulValue |= ((0x1 << 8) | (0x1 << 4));  pGrf[7] = ulValue | (0xFFFF << 16);  printf("%s, %d: GRF_GPIO0D_IOMUX_H(0x%x) = 0x%x
", __func__, __LINE__, &pGrf[7], pGrf[7]);    if (I2cIoInit(m_i2c2m0) != LZ_HARDWARE_SUCCESS)  {    printf("%s, %s, %d: I2cIoInit failed!
", __FILE__, __func__, __LINE__);    return __LINE__;  }  if (LzI2cInit(NFC_I2C_PORT, m_i2c2_freq) != LZ_HARDWARE_SUCCESS)  {    printf("%s, %s, %d: LzI2cInit failed!
", __FILE__, __func__, __LINE__);    return __LINE__;  }    return 0;}
unsigned int nfc_init(void){  unsigned int ret = 0;  uint32_t *pGrf = (uint32_t *)0x41050000U;  uint32_t ulValue;    if (m_nfc_is_init == 1)  {    printf("%s, %s, %d: Nfc readly init!
", __FILE__, __func__, __LINE__);    return __LINE__;  }    ret = NT3HI2cInit();  if (ret != 0)  {    printf("%s, %s, %d: NT3HI2cInit failed!
", __FILE__, __func__, __LINE__);    return __LINE__;  }    m_nfc_is_init = 1;  return 0;}

(左右移動查看全部內容)

3、NFC寫入信息程序設計

向NFC芯片寫入數據,但需要寫入2個記錄時,第2個記錄的位置需要用 NDEFLastPos 來定義;當需要寫入3個記錄時,第2個和第3個記錄的位置分別需要用 NDEFMiddlePos 和 NDEFLastPos 來定義。

4e60661c-c10b-11ec-bce3-dac502259ad0.png

圖3NDEF協議格式圖

ret = nfc_store_text(NDEFFirstPos, (uint8_t *)TEXT);if (ret != 1) {   printf("NFC Write Text Failed: %d
", ret);}
ret = nfc_store_uri_http(NDEFLastPos, (uint8_t *)WEB);if (ret != 1) {  printf("NFC Write Url Failed: %d
", ret);}

(左右移動查看全部內容)

其中,nfc_store_text()和nfc_store_uri_http()兩個函數首先按照rtdText.h和rtdUri.h中RTD協議進行處理。然后與ndef.h中NT3HwriteRecord()進行記錄寫入。

bool nfc_store_text(RecordPosEnu position, uint8_t *text){  NDEFDataStr data;    if (m_nfc_is_init == 0)  {    printf("%s, %s, %d: NFC is not init!
", __FILE__, __func__, __LINE__);    return 0;  }    prepareText(&data, position, text);  return NT3HwriteRecord(&data);}
bool nfc_store_uri_http(RecordPosEnu position, uint8_t *http){  NDEFDataStr data;    if (m_nfc_is_init == 0)  {    printf("%s, %s, %d: NFC is not init!
", __FILE__, __func__, __LINE__);    return 0;  }    prepareUrihttp(&data, position, http);  return NT3HwriteRecord(&data);

(左右移動查看全部內容)

NT3HwriteRecord()則負責將需要下發的信息打包成NDEF協議報文,最后由I2C總線將NDEF協議報文發送給NFC設備。

bool NT3HwriteRecord(const NDEFDataStr *data){  uint8_t recordLength = 0, mbMe;  UncompletePageStr addPage;  addPage.page = 0;    // calculate the last used page  if (data->ndefPosition != NDEFFirstPos )  {    NT3HReadHeaderNfc(&recordLength, &mbMe);    addPage.page = (recordLength + sizeof(NDEFHeaderStr) + 1) / NFC_PAGE_SIZE;        //remove the NDEF_END_BYTE byte because it will overwrite by the new Record    addPage.usedBytes = (recordLength + sizeof(NDEFHeaderStr) + 1) % NFC_PAGE_SIZE - 1;  }    // call the appropriate function and consider the pointer  // within the NFC_PAGE_SIZE that need to be used  int16_t payloadPtr = addFunct[data->ndefPosition](&addPage, data, data->ndefPosition);  if (payloadPtr == -1)  {    errNo = NT3HERROR_TYPE_NOT_SUPPORTED;    return false;  }    return writeUserPayload(payloadPtr, data, &addPage);}

(左右移動查看全部內容)

四、編譯過程

1、搭建和下載源代碼

我已將OpenHarmony源代碼上傳到Gitee社區中,大家可以根據以下網址下載。

https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts

注意:編譯環境可根據以下網址來操作:

https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/vendor/lockzhiner/rk2206/README_zh.md

2、打開sdk下面路徑的文件

/vendor/lockzhiner/rk2206/samples/b2_nfc/nfc_example.c

注意:Gitee上的NFC控制案例為通用案例,請大家根據上述的需求修改相關源代碼。

3、修改編譯腳本

修改 vendor/lockzhiner/rk2206/sample 路徑下 BUILD.gn 文件,指定 nfc_example 參與編譯。

"./b2_nfc:nfc_example",

(左右移動查看全部內容)

修改 device/lockzhiner/rk2206/sdk_liteos 路徑下 Makefile 文件,添加 -lnfc_example 參與編譯。

hardware_LIBS = -lhal_iothardware -lhardware -lnfc_example

(左右移動查看全部內容)

4、編譯固件

hb set -root .hb sethb build -f

(左右移動查看全部內容)

5、燒寫固件

請參考Gitee網址的說明手冊(“燒錄打印”章節):

https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/device/rockchip/README_zh.md

五、實驗結果

程序編譯燒寫到開發板后,按下開發板的RESET按鍵,通過串口軟件查看日志如下:

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

(左右移動查看全部內容)

原文標題:小凌派-RK2206開發板:NFC控制案例

文章出處:【微信公眾號:HarmonyOS官方合作社區】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    6747

    瀏覽量

    123201
  • nfc
    nfc
    +關注

    關注

    59

    文章

    1617

    瀏覽量

    180413
  • 瑞芯微
    +關注

    關注

    23

    文章

    402

    瀏覽量

    51263
  • RK2206
    +關注

    關注

    0

    文章

    34

    瀏覽量

    1766

原文標題:小凌派-RK2206開發板:NFC控制案例

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    首發!成功移植OpenHarmony到RK2206開發板,2022年2月即將開源~

    【直播報名】移植OpenHarmony輕量系統到龍芯1c300芯片經過三周的時間,我們成功將OpenHarmony 1.1.2版本移植到
    發表于 12-15 18:30

    小凌派-RK2206開發板:NFC控制案例

    數據交換和服務。本文基于RK2206芯片 + 鴻蒙LiteOS
    發表于 04-19 15:52

    輕量系統開發套件介紹:凌睿智捷 | 小凌派-RK2206 開發板套件

    凌睿智捷 | 小凌派-RK2206 開發板套件是由福州市凌睿智捷電子有限公司出品,主控器為高性能、高性價比的RK2206
    發表于 04-21 13:39

    RK2206開發板搭載OpenHarmony操作系統簡介

    1、小凌派-RK2206開發板簡介小凌派-RK2206開發板主控器為高性能、高性價比的RK2206
    發表于 07-28 17:28

    將OpenHarmony1.1.2版本移植到RK2206開發板上介紹

    芯片推出的一種低功耗、高集成的MCU無線局域網處理器,它可以應用在不同的應用領域,如物聯網、可穿戴設備、家庭自動化、云連接等。RK2206
    發表于 08-23 18:11

    基于RK2206開發板實現一種智慧車載模塊的設計

    警示系統(LWDS)、前方碰撞預警系統(FCWS)及后方碰撞預警系統等智慧車(Smart Car)相關應用。  本文基于
    發表于 09-06 18:13

    RK2206開發板搭載OpenHarmony操作系統

    凌智RK2206開發板簡介凌智RK2206開發板是由福州市凌睿智捷電子有限公司出品,主控器為高性能、高性價比的
    發表于 09-07 17:15

    基于小凌派RK2206的智能電子寵物

    、項目總結和展望 本項目設計硬件選用小凌派開發板搭載低功耗、高集成的無線局域網處理器RK2206,搭載OpenHarmony操作系統
    發表于 01-19 12:48

    【新書推薦】《OpenHarmony嵌入式系統原理與應用--基于RK2206芯片(課視頻版)》

    。OpenHarmony可以基于同-·套系統能力,適配多種終端形態,是一款面向未來、面向全場景的分布式操作系統。本書以 OpenHarmony 為主題,詳細講解了基于
    發表于 03-23 18:30

    已結束-【書籍評測活動NO.12】 OpenHarmony嵌入式系統原理與應用——基于RK2206芯片課視頻版)

    。OpenHarmony可以基于同一套系統,適配多種終端形態,是一款面向未來、面向全場景的分布式操作系統,未來前景可期。本書選擇OpenHarmony為主題,詳細講解基于
    發表于 05-08 15:51

    《OpenHarmony嵌入式系統原理與應用——基于RK2206芯片課視頻版)》學習記錄之一

    非常感謝電子發燒友論壇提供這次《《OpenHarmony嵌入式系統原理與應用——基于RK2206芯片課視頻版)》學習機會。 下面記錄一下書中實驗需要注意的一些細節。 1、安裝hb后
    發表于 06-15 14:10

    首發!成功移植鴻蒙到RK2206開發板,代碼即將開源~

    經過三周的時間,我們成功將OpenHarmony 1.1.2版本移植到RK2206開發板上,板載芯片
    發表于 12-15 18:21 ?4004次閱讀
    首發!成功移植鴻蒙到<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK2206</b>開發板,代碼即將開源~

    基于小凌派RK2206開發板所制作的簡易示波器

    RK2206開發板而做的簡易示波器開發。 本開發以RK2206芯片 + OpenHarmo
    的頭像 發表于 05-06 17:09 ?1761次閱讀
    基于小凌派<b class='flag-5'>RK2206</b>開發板所制作的簡易示波器

    首發!成功移植OpenHarmony到RK2206開發板,2022年2月即將開源~

    經過三周的時間,我們成功將OpenHarmony 1.1.2版本移植到RK2206開發板上,板載芯片
    的頭像 發表于 04-11 14:05 ?2246次閱讀
    首發!成功移植OpenHarmony到<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK2206</b>開發板,2022年2月即將開源~

    小凌派-RK2206開發板:UART控制案例

    通信與并行通信之間加以轉換。作為把并行輸入信號轉成串行輸出信號的芯片,UART通常被集成于其他通訊接口的連結上。本文基于RK2206
    的頭像 發表于 06-14 11:12 ?1010次閱讀
    小凌派-<b class='flag-5'>RK2206</b>開發板:UART<b class='flag-5'>控制</b>案例