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

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

3天內(nèi)不再提示

開源物聯(lián)網(wǎng)技術(shù)--IIC I/O擴展芯片的軟硬件設計分享

jf_94171069 ? 來源:jf_94171069 ? 作者:jf_94171069 ? 2024-09-26 12:16 ? 次閱讀

01

物聯(lián)網(wǎng)系統(tǒng)中為什么要使用IIC I/O擴展芯片

在物聯(lián)網(wǎng)系統(tǒng)中使用IIC(也稱為I2C)I/O擴展芯片的原因主要可以歸結(jié)為以下幾點:

1、擴大I/O端口數(shù)量

硬件資源限制:許多微控制器MCU)自帶的I/O端口數(shù)量有限,但物聯(lián)網(wǎng)項目往往需要連接大量的傳感器、執(zhí)行器和其他外設。I2C I/O擴展芯片能夠通過I2C接口提供額外的I/O端口,從而滿足項目需求。

靈活性:通過擴展芯片,設計者可以根據(jù)項目需求靈活增加或減少外設連接,而無需更換主控制器。

2、簡化布線和連接

減少引腳需求:I2C總線僅需要兩根線(SCL時鐘線和SDA數(shù)據(jù)線)即可實現(xiàn)多個設備之間的通信,這大大減少了系統(tǒng)布線的復雜性和成本。

便于管理:通過I2C總線連接的設備可以使用統(tǒng)一的通信協(xié)議進行通信,簡化了系統(tǒng)的維護和管理工作。

3、提高系統(tǒng)性能

高效通信:I2C協(xié)議具有高效的通信機制,能夠支持高速數(shù)據(jù)傳輸,提高系統(tǒng)的整體性能。

時鐘控制:I2C I/O擴展芯片可以控制外部設備的時鐘,有助于優(yōu)化系統(tǒng)的時序控制,提高系統(tǒng)的穩(wěn)定性和可靠性。

4、降低成本和功耗

減少元件數(shù)量:使用I2C I/O擴展芯片可以減少系統(tǒng)中其他類型擴展元件的使用,從而降低整體成本。

低功耗:I2C總線支持低功耗模式,有助于降低系統(tǒng)的整體功耗,延長電池壽命(在便攜式或無線物聯(lián)網(wǎng)設備中尤為重要)。

5、廣泛應用場景

傳感器網(wǎng)絡:在物聯(lián)網(wǎng)系統(tǒng)中,傳感器是不可或缺的組成部分。I2C I/O擴展芯片可以方便地連接各種類型的傳感器(如溫度、濕度、加速度計等),實現(xiàn)數(shù)據(jù)的采集和傳輸。

工業(yè)自動化:在工業(yè)自動化領(lǐng)域,PLC控制系統(tǒng)需要與大量外設進行通信。I2C I/O擴展芯片能夠滿足這一需求,提高工業(yè)自動化系統(tǒng)的集成度和可靠性。

智能家居智能家居系統(tǒng)需要連接和控制各種智能家電和設備。I2C I/O擴展芯片可以擴展智能家居系統(tǒng)的控制能力,實現(xiàn)更多樣化的功能。

工業(yè)自動化和控制:在工業(yè)自動化系統(tǒng)中,經(jīng)常需要連接和控制大量的傳感器、執(zhí)行器和其他設備。IIC IO擴展芯片可以提供更多的IO端口,以便與這些設備進行通信和控制。例如,它們可以用于讀取傳感器的數(shù)據(jù)、控制執(zhí)行器的動作或與其他工業(yè)設備進行交互。

消費電子產(chǎn)品:在消費電子產(chǎn)品中,如智能家居設備、智能音箱、智能手環(huán)等,IIC IO擴展芯片也發(fā)揮著重要作用。它們可以用于擴展設備的IO接口,以便連接更多的外部設備或傳感器。例如,智能音箱可以通過IIC IO擴展芯片連接更多的麥克風或揚聲器,提高音頻處理的性能和質(zhì)量。

嵌入式系統(tǒng):在嵌入式系統(tǒng)中,由于資源限制和成本考慮,微控制器的IO端口數(shù)量往往有限。IIC IO擴展芯片可以有效地解決這個問題,為嵌入式系統(tǒng)提供額外的IO端口。這些端口可以用于連接外部設備、擴展系統(tǒng)功能或?qū)崿F(xiàn)與其他系統(tǒng)的通信。

測試與測量設備:在測試和測量領(lǐng)域,IIC IO擴展芯片可以用于連接各種測試設備和傳感器。通過擴展IO端口,測試設備可以獲取更多的數(shù)據(jù)輸入,提高測試的準確性和效率。同時,IIC IO擴展芯片還可以用于控制測試過程中的各種設備和參數(shù)。

醫(yī)療設備:在醫(yī)療設備中,IIC IO擴展芯片可以用于連接各種醫(yī)療傳感器和執(zhí)行器。例如,在監(jiān)護儀中,IIC IO擴展芯片可以連接多個生命體征傳感器,實時監(jiān)測患者的血壓、心率等生理參數(shù)。在醫(yī)療機器人中,IIC IO擴展芯片可以控制機器人的運動和操作。

綜上所述,IIC(I2C)I/O擴展芯片在物聯(lián)網(wǎng)系統(tǒng)中扮演著重要角色,它們通過提供額外的I/O端口、簡化布線和連接、提高系統(tǒng)性能、降低成本和功耗以及支持廣泛應用場景等方式,為物聯(lián)網(wǎng)系統(tǒng)的設計和實現(xiàn)帶來了諸多便利和優(yōu)勢。

02

IIC I/O擴展芯片的行業(yè)知識介紹

IIC I/O擴展芯片定義

IIc接口IO擴展芯片是一種可以為電子設備添加輸入輸出功能的集成電路,它可以有效提高設備的性能。

IIC 原理

I2C通信協(xié)議:I2C是一種串行通信協(xié)議,用于連接微控制器及其外圍設備。它只需要兩根線(SDA數(shù)據(jù)線和SCL時鐘線)即可實現(xiàn)全雙工通信,同時還可以連接多個設備到同一總線上。

設備尋址:每個I2C設備都有一個唯一的地址,主控制器通過發(fā)送設備的地址來選中并與之通信。I2C擴展IO芯片也具備一個或多個可設置的地址,以便主控制器能夠識別并與之通信。

數(shù)據(jù)傳輸:在選中特定的I2C設備后,主控制器可以通過I2C總線發(fā)送數(shù)據(jù)到該設備,或者從該設備讀取數(shù)據(jù)。對于I2C擴展IO芯片,主控制器可以發(fā)送命令來設置或讀取IO端口的電平狀態(tài),從而實現(xiàn)對外圍設備的控制或監(jiān)測。

中斷機制:許多I2C擴展IO芯片還具備中斷功能。當IO端口的電平狀態(tài)發(fā)生變化時,芯片可以產(chǎn)生一個中斷信號,通知主控制器進行相應的處理。這樣,主控制器可以更加高效地響應外部事件,而無需持續(xù)輪詢IO端口的狀態(tài)。

內(nèi)部寄存器:I2C擴展IO芯片內(nèi)部通常包含多個寄存器,用于存儲IO端口的配置信息、數(shù)據(jù)等。主控制器可以通過I2C總線訪問這些寄存器,以實現(xiàn)對IO端口的控制和管理。

IIC I/O擴展芯片的參數(shù)選型

電源電壓:確保你的系統(tǒng)電源電壓與IO擴展芯片的電源電壓兼容。常見的電源電壓范圍包括1.8V、3.3V、5V等。

IO口數(shù)量:根據(jù)你的應用需求確定所需的IO口數(shù)量。有些IO擴展芯片提供8個、16個或更多的IO口。

IO口類型:考慮你需要的IO口類型,如準雙向口、開漏輸出等。準雙向口既可以作為輸入也可以作為輸出,而開漏輸出則可以用于驅(qū)動LED等外部設備。

通信接口:確保IO擴展芯片支持你的主控制器所使用的通信接口,如I2C、SPI等。I2C接口通常使用兩根線(SDA和SCL)進行通信,具有簡單易用、支持多設備連接等優(yōu)點。

中斷功能:如果你的應用需要實時監(jiān)測外部設備狀態(tài)的變化,那么選擇具有中斷功能的IO擴展芯片將非常有用。當中斷引腳被觸發(fā)時,主控制器可以立即響應并處理相應的事件。

封裝和尺寸:根據(jù)你的應用需求和電路板空間限制選擇合適的封裝和尺寸。常見的封裝類型包括TSSOP、QFN、SSOP等,尺寸范圍也有所不同。

工作溫度和功耗:考慮你的應用所在的環(huán)境溫度和功耗要求。選擇具有適當工作溫度和低功耗的IO擴展芯片將有助于提高系統(tǒng)的穩(wěn)定性和可靠性。

其他特性:根據(jù)你的應用需求,還可以考慮其他特性,如驅(qū)動能力(最大輸出電流)、輸入/輸出電平范圍、可編程性(是否支持通過編程來配置IO口)等。

IIC I/O擴展芯片的廠商

NXP Semiconductors(恩智浦半導體:NXP是全球領(lǐng)先的半導體公司之一,提供廣泛的IIC IO擴展芯片產(chǎn)品。其產(chǎn)品線包括PCF8574、PCA9555等,這些芯片具有高性能、低功耗和易用性等特點,廣泛應用于各種領(lǐng)域。

Microchip Technology(微芯科技):Microchip是一家專注于嵌入式控制和混合信號半導體解決方案的供應商。其IIC IO擴展芯片產(chǎn)品包括MCP23017、MCP23S17等,這些芯片具有高集成度、高可靠性和低功耗等特點,適用于工業(yè)自動化、消費電子和汽車電子等領(lǐng)域。

Texas Instruments(德州儀器:德州儀器是一家全球性的半導體設計和制造公司,其IIC IO擴展芯片產(chǎn)品包括TPS2113、TPS2296等。這些芯片具有高性能、高精度和低功耗等特點,廣泛應用于電源管理、電機控制和工業(yè)自動化等領(lǐng)域。

STMicroelectronics(意法半導體:意法半導體是一家全球領(lǐng)先的半導體公司,提供廣泛的IIC IO擴展芯片產(chǎn)品。其產(chǎn)品線包括VLSI Solution的82C55A等,這些芯片具有高速、高可靠性和低功耗等特點,適用于各種嵌入式系統(tǒng)和工業(yè)自動化應用。

此外,還有其他一些廠商也提供IIC IO擴展芯片產(chǎn)品,如Maxim Integrated、Renesas Electronics等。在選擇IIC IO擴展芯片時,需要根據(jù)具體的應用需求和性能要求來選擇合適的廠商和產(chǎn)品。國內(nèi)也有一些知名的IIC(實際上是I2C,即Inter-Integrated Circuit)IO擴展芯片廠商,以下是一些例子:

中微愛芯:作為中國領(lǐng)先的半導體公司之一,中微愛芯專注于消費電子芯片和小家電芯片的研發(fā)。他們的產(chǎn)品可能包括IIC IO擴展芯片,但具體型號和規(guī)格可能需要查詢其官方渠道。

紫光展銳:紫光展銳是中國集成電路設計和解決方案供應商,他們在移動通信、數(shù)字多媒體等領(lǐng)域積累了豐富的經(jīng)驗。雖然他們主要以手機芯片聞名,但他們的產(chǎn)品線可能也涵蓋IIC IO擴展芯片。

華大半導體:華大半導體是中國電子信息產(chǎn)業(yè)集團有限公司(CEC)旗下的核心企業(yè),是中國“909”工程集成電路項目的重點承擔單位。他們提供多種類型的半導體產(chǎn)品,包括可能包含IIC IO擴展芯片的產(chǎn)品。

03

IIC I/O擴展芯片的硬件設計方案

本文主要采用了信路達的XL9535做為驅(qū)動芯片。

1、XL9535概述

XL9535是一款24引腳CMOS器件,通過I2C總線/SMBus接口 串行時鐘線(SCL)、串行數(shù)據(jù)(SDA)為大多數(shù)微控制器系列提供16位通用并行輸入/輸出(GPIO)擴展。這些設備設計用于2.3-V至5.5-V Vcc操作。這些改進包括更高的驅(qū)動能力、5V I/O容差、更低的電源電流、單獨的I/O配置和更小的封裝。 通電時,I/O被配置為輸入。系統(tǒng)主機可以通過寫入I/O配置位來啟用I/O作為輸入或輸出。每個輸入或輸出的數(shù)據(jù)都保存在相應的輸入或輸出寄存器中。輸入端口寄存器的極性可以用極性反轉(zhuǎn)寄存器反轉(zhuǎn)。所有寄存器均可由系統(tǒng)主控器讀取。 當任何輸入狀態(tài)與其對應的輸入端口寄存器狀態(tài)不同時,這些設備開漏中斷(/INT)輸出被激活,并用于向系統(tǒng)主機指示輸入狀態(tài)已改變。在超時或其他不當操作的情況下,系統(tǒng)主設備可以利用上電重置功能重置這些設備。通電重置將寄存器設置為默認值,并初始化I2C/SMBus狀態(tài)機。三個硬件引腳(A0、A1和A2)改變固定的I2C總線地址,并允許多達八個設備共享同一I2C總線/SMBus。

2、 XL9535特性

I2C總線至16位GPIO擴展器

工作電源電壓范圍為2.3 V至5.5 V

低待機電流消耗

5 V容錯I/O端口

400 kHz快速模式I2C總線時鐘頻率

SCL/SDA輸入上的噪聲濾波器

內(nèi)部通電復位

通電時無故障

極性反轉(zhuǎn)寄存器

開漏有源低中斷輸出

16個I/O引腳,默認為16個輸入

3、XL9535引腳配置和功能

wKgaomb04CqAN1zIAAJybxJ7opk830.jpg

wKgZomb04CuABTRrAAHFtrmLsyg090.jpg

4、XL9535功能框圖和參考設計

wKgaomb04DGAE0BVAAD_hu4EAhQ523.jpg

wKgZomb04DGAG1_bAAFKmOUzzmM148.jpg

04

IIC I/O擴展芯片的軟件設計方案

本文采用了奇跡物聯(lián)的紅豆版開源技術(shù)平臺為主控單元,一步步手把手教會讀者如何使用紅豆版開源平臺編寫XL9535驅(qū)動。這里對代碼就不多詳解,如果需要詳細了解,請到奇跡物聯(lián)的紅豆版開源平臺了解詳細代碼講解。

1 Gitee鏈接地址

Demo位于amaziot_bloom_os_sdksample3rd1.0_XL9535

Gitee源碼地址:https://gitee.com/ning./hongdou

Github源碼地址:https://github.com/ayumid/hongdou

編譯指令:.build.bat -l .amaziot_bloom_os_sdksample3rd1.0_XL9535

2 組件功能介紹

驅(qū)動XL9535芯片,實現(xiàn)輸入IO檢測。

3 代碼講解

1 drv_xl9535_i2c_init

功能:該函數(shù)用于,將發(fā)送數(shù)據(jù)長度寫入xl9535寄存器。

參數(shù):五

返回值:無

示例:

//初始化i2c總線
ret = drv_xl9535_i2c_init();

2 drv_xl9535_i2c_read

功能:該函數(shù)用于,讀取I2C從機。

參數(shù):五

返回值:無

示例:

RegAddr       = 0x00;
ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
sample_xl9535_catstudio_printf("read reg 00 i2c value=0x%x, ret=%dn", RegReadValue0, ret);

3 drv_xl9535_i2c_write

功能:該函數(shù)用于,發(fā)送數(shù)據(jù)到I2C從機。

參數(shù):五

返回值:無

示例:

RegAddr       = 0x06;
RegWriteValue = 0xFF;
ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0);
sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%dn", RegWriteValue, ret);

4 Demo實戰(zhàn)

4.1 概述

上電后,按下按鍵,串口會打印出按下了哪一個按鍵

4.2 測試

測試步驟:

參考編譯教程,和文檔開頭的編譯指令,進行編譯

按照編譯教程選擇對應的選項

燒錄

4.3 宏定義介紹

sample_xl9535_uart_printf

輸出日志到DEBUG 串口,日志比較少,可以輸出到這個串口,如果日志比較多,需要輸出到usb口,以免不必要的問題出現(xiàn)

sample_xl9535_catstudio_printf

輸出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新對應版本mdb.txt文件,軟件打開filtter過濾日志,只查看用戶輸出的日志

SAMPLE_XL9535_STACK_SIZE

棧空間宏定義

4.4 全局變量介紹

sample_xl9535_int_detect_stack_ptr

任務??臻g,本例使用數(shù)組實現(xiàn),用戶在做項目時,可以預先估算下當先任務需要的大致??臻g,OS沒有提供可以查看??臻g使用情況的API

sample_xl9535_int_detect_task_ref

任務指針

4.5 函數(shù)介紹

Phase1Inits_enter

底層初始化,本例空

Phase1Inits_exit

底層初始化,本例空

Phase2Inits_enter

底層初始化,本例空

Phase2Inits_exit

創(chuàng)建主任務,初始化INT 引腳

代碼片段:

int ret = 0;
GPIOConfiguration config = {0};

//創(chuàng)建定時器
OSATimerCreate(&sample_xl9535_int_detect_timer_ref);
//創(chuàng)建中斷事件
OSAFlagCreate( &sample_xl9535_int_detect_flg_ref);  
Os_Create_HISR(&sample_xl9535_int_detect_hisr, "sample_xl9535_int_detect_hisr", sample_xl9535_detect_handler, 2);
//創(chuàng)建中斷處理任務
OSATaskCreate(&sample_xl9535_int_detect_task_ref, sample_xl9535_int_detect_stack_ptr, SAMPLE_XL9535_STACK_SIZE, 100, "detect_task", sample_xl9535_detect_task, NULL);

//初始化int引腳,這里使用70腳 gpio126
config.pinDir = GPIO_IN_PIN;
config.pinEd = GPIO_RISE_EDGE;
config.pinPull = GPIO_PULLUP_ENABLE;
config.isr = sample_xl9535_irq_handler;
GpioInitConfiguration(SAMPLE_GPIO_ISR_PIN_NUM, config);

sample_xl9535_detect_task

主任務,代碼發(fā)分為兩部分,一部分是發(fā)送不定長數(shù)據(jù);另一部分是上電后等待其它模塊發(fā)送的數(shù)據(jù),收到后打印到串口。

代碼片段:

void sample_xl9535_detect_task(void *param)
{
    GPIO_ReturnCode ret = 0;
    UINT32 value = 0;
    OSA_STATUS status = OS_SUCCESS;
    UINT32 flag_value = 0;
    unsigned char RegAddr = 0;
    unsigned char RegWriteValue = 0;
    unsigned char RegReadValue0 = 0;
    unsigned char RegReadValue1 = 0;
    UINT8 down_en = 0;
    UINT8 up_en = 0;
    UINT8 sig_en = 0;
    UINT8 mul_en = 0;
    UINT8 read_en = 0;
    UINT8 de_en = 0;
    UINT8 ck_en = 0;
    UINT8 sim_en = 0;
    UINT8 gnss_en = 0;
    UINT8 nb_en = 0;
    UINT8 fourg_en = 0;

    //初始化i2c總線
    ret = drv_xl9535_i2c_init();
    sample_xl9535_catstudio_printf("ql_i2c_init ret %d", ret);

    //上電后,讀xl9535 io擴展芯片的8個寄存器,測試用
    RegAddr       = 0x00;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 00 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x01;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 01 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x02;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 02 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x03;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 03 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x04;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 04 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x05;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 05 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x06;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 06 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
    RegAddr       = 0x07;
    ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("read reg 07 i2c value=0x%x, ret=%dn", RegReadValue0, ret);

    //等1s
    OSATaskSleep(1 * 200);

    //初始化xl0535 io擴展芯片的06 07寄存器,設置所有的io都是輸入
    RegAddr       = 0x06;
    RegWriteValue = 0xFF;
    ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%dn", RegWriteValue, ret);
    RegAddr       = 0x07;
    RegWriteValue = 0xFF;
    ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0);
    sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%dn", RegWriteValue, ret);
    
    while(1)
    {
//        sample_xl9535_catstudio_printf("sample_xl9535_detect_taskrn");
        status = OSAFlagWait(sample_xl9535_int_detect_flg_ref, 0x01, OSA_FLAG_OR_CLEAR, &flag_value, OSA_SUSPEND);

        //紅豆版,設置了邊沿,但是還是會上升沿,下降沿都觸發(fā),所以會執(zhí)行兩次
        if(flag_value & 0x01)
        {
            RegAddr       = 0x00;
            //ret = ql_i2c_read(i2c_no, SAMPLE_I2C_SLAVE_ADDR, RegAddr, &RegReadValue0, 1);
            ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0);
//            sample_xl9535_catstudio_printf("read reg 00 i2c value=0x%x, ret=%dn", RegReadValue0, ret);
            RegAddr       = 0x01;
            //ret = ql_i2c_read(i2c_no, SAMPLE_I2C_SLAVE_ADDR, RegAddr, &RegReadValue0, 1);
            ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue1);
//            sample_xl9535_catstudio_printf("read reg 01 i2c value=0x%x, ret=%dn", RegReadValue1, ret);

            //寄存器值非默認值,表示有io輸入,否則表示是上升沿中斷
            if(RegReadValue0 != 0xff || RegReadValue1 != 0x07)
            {
                event_ticks = OSAGetTicks();
                int_status = 0;

                //判斷是那個IO這里使用寄存器值判斷,后續(xù)可以改為根據(jù)位判斷
                if(RegReadValue1 == DRV_XL9535_BUTTON_DOWN_EN)
                {
//                    sample_xl9535_catstudio_printf("down int");
                    down_en = 1;
                }
                else if(RegReadValue1 == DRV_XL9535_BUTTON_UP_EN)
                {
//                    sample_xl9535_catstudio_printf("up int");
                    up_en = 1;
                }
                else if(RegReadValue1 == DRV_XL9535_BUTTON_SIG_EN)
                {
//                    sample_xl9535_catstudio_printf("sig int");
                    sig_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_MUL_EN)
                {
//                    sample_xl9535_catstudio_printf("mul int");
                    mul_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_READ_EN)
                {
//                    sample_xl9535_catstudio_printf("read int");
                    read_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_DE_EN)
                {
//                    sample_xl9535_catstudio_printf("de int");
                    de_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_CK_EN)
                {
//                    sample_xl9535_catstudio_printf("ck int");
                    ck_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_SIM_EN)
                {
//                    sample_xl9535_catstudio_printf("sim int");
                    sim_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_GNSS_EN)
                {
//                    sample_xl9535_catstudio_printf("gnss int");
                    gnss_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_NB_EN)
                {
//                    sample_xl9535_catstudio_printf("nb int");
                    nb_en = 1;
                }
                else if(RegReadValue0 == DRV_XL9535_BUTTON_4G_EN)
                {
//                    sample_xl9535_catstudio_printf("4g int");
                    fourg_en = 1;
                }
            }
            else
            {
                if(int_status == 0)
                {
                    UINT32 keep_ticks = OSAGetTicks() - event_ticks;
                    
                    if(keep_ticks > 20)
                    {
                        //檢測到某個IO被按下后,可以在這里,或者發(fā)送信號,消息等去其它任務執(zhí)行相應操作
//                        sample_xl9535_catstudio_printf("keep_ticks:%d, event_ticks:%d", keep_ticks, event_ticks);
                        if(down_en == 1)
                        {
                            sample_xl9535_catstudio_printf("down en");
                        }
                        else if(up_en == 1)
                        {
                            sample_xl9535_catstudio_printf("up en");
                        }
                        else if(sig_en == 1)
                        {
                            sample_xl9535_catstudio_printf("sig en");
                        }
                        else if(mul_en == 1)
                        {
                            sample_xl9535_catstudio_printf("mul en");
                        }
                        else if(read_en == 1)
                        {
                            sample_xl9535_catstudio_printf("read en");
                        }
                        else if(de_en == 1)
                        {
                            sample_xl9535_catstudio_printf("de en");
                        }
                        else if(ck_en == 1)
                        {
                            sample_xl9535_catstudio_printf("ck en");
                        }
                        else if(sim_en == 1)
                        {
                            sample_xl9535_catstudio_printf("sim en");
                        }
                        else if(gnss_en == 1)
                        {
                            sample_xl9535_catstudio_printf("gnss en");
                        }
                        else if(nb_en == 1)
                        {
                            sample_xl9535_catstudio_printf("nb en");
                        }
                        else if(fourg_en == 1)
                        {
                            sample_xl9535_catstudio_printf("4g en");
                        }
                    }
                    down_en = 0;
                    up_en = 0;
                    sig_en = 0;
                    mul_en = 0;
                    read_en = 0;
                    de_en = 0;
                    ck_en = 0;
                    sim_en = 0;
                    gnss_en = 0;
                    nb_en = 0;
                    fourg_en = 0;
                }
                int_status = 1;
            }
            
        }
    }
}

4.6 固件

上電后,按下按鍵,串口會打印出按下了哪一個按鍵

wKgaomb04DKAAmuGAABMmTPippQ638.jpg

點擊下載 Lora Demo固件

本文章源自奇跡物聯(lián)開源的物聯(lián)網(wǎng)應用知識庫Cellular IoT Wiki,更多技術(shù)干貨歡迎關(guān)注收藏Wiki:Cellular IoT Wiki 知識庫(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)

歡迎同學們走進AmazIOT知識庫的世界!

這里是為物聯(lián)網(wǎng)人構(gòu)建的技術(shù)應用百科,以便幫助你更快更簡單的開發(fā)物聯(lián)網(wǎng)產(chǎn)品。

Cellular IoT Wiki初心:

在我們長期投身于蜂窩物聯(lián)網(wǎng) ODM/OEM 解決方案的實踐過程中,一直被物聯(lián)網(wǎng)技術(shù)碎片化與產(chǎn)業(yè)資源碎片化的問題所困擾。從產(chǎn)品定義、芯片選型,到軟硬件研發(fā)和測試,物聯(lián)網(wǎng)技術(shù)的碎片化以及產(chǎn)業(yè)資源的碎片化,始終對團隊的產(chǎn)品開發(fā)交付質(zhì)量和效率形成制約。為了減少因物聯(lián)網(wǎng)碎片化而帶來的重復開發(fā)工作,我們著手對物聯(lián)網(wǎng)開發(fā)中高頻應用的技術(shù)知識進行沉淀管理,并基于 Bloom OS 搭建了不同平臺的 RTOS 應用生態(tài)。后來我們發(fā)現(xiàn),很多物聯(lián)網(wǎng)產(chǎn)品開發(fā)團隊都面臨著相似的困擾,于是,我們決定向全體物聯(lián)網(wǎng)行業(yè)開發(fā)者開放奇跡物聯(lián)內(nèi)部沉淀的應用技術(shù)知識庫 Wiki,期望能為更多物聯(lián)網(wǎng)產(chǎn)品開發(fā)者減輕一些重復造輪子的負擔。

Cellular IoT Wiki沉淀的技術(shù)內(nèi)容方向如下:

wKgaombqoM2AYL2RAAQrZ8e-uz8392.jpg

奇跡物聯(lián)的業(yè)務服務范圍:基于自研的NB-IoT、Cat1、Cat4等物聯(lián)網(wǎng)模組,為客戶物聯(lián)網(wǎng)ODM/OEM解決方案服務。我們的研發(fā)技術(shù)中心在石家莊,PCBA生產(chǎn)基地分布在深圳、石家莊、北京三個工廠,滿足不同區(qū)域&不同量產(chǎn)規(guī)模&不同產(chǎn)品開發(fā)階段的生產(chǎn)制造任務。跟傳統(tǒng)PCBA工廠最大的區(qū)別是我們只服務物聯(lián)網(wǎng)行業(yè)客戶。

連接我們,和10000+物聯(lián)網(wǎng)開發(fā)者一起 降低技術(shù)和成本門檻

讓蜂窩物聯(lián)網(wǎng)應用更簡單~~

哈哈你終于滑到最重要的模塊了,

千萬不!要!劃!走!忍住沖動!~

歡迎加入飛書“開源技術(shù)交流”,隨時找到我們哦~

點擊鏈接如何加入奇跡物聯(lián)技術(shù)話題群(https://rckrv97mzx.feishu.cn/docx/Xskpd1cFQo7hu9x5EuicbsjTnTf)可以獲取加入技術(shù)話題群攻略

Hey 物聯(lián)網(wǎng)從業(yè)者,

你是否有了解過奇跡物聯(lián)的官方公眾號“eSIM物聯(lián)工場”呢?

這里是奇跡物聯(lián)的物聯(lián)網(wǎng)應用技術(shù)開源wiki主陣地,歡迎關(guān)注公眾號,不迷路~

及時獲得最新物聯(lián)網(wǎng)應用技術(shù)沉淀發(fā)布

注:本文部分內(nèi)容來源于網(wǎng)絡,如有侵權(quán),請及時聯(lián)系我們。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2927

    文章

    46011

    瀏覽量

    389282
  • IIC
    IIC
    +關(guān)注

    關(guān)注

    11

    文章

    306

    瀏覽量

    39277
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3632

    瀏覽量

    43575
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    什么是聯(lián)網(wǎng)技術(shù)

    什么是聯(lián)網(wǎng)技術(shù)? 聯(lián)網(wǎng)技術(shù)(Internet of Things, IoT)是一種通過信息傳感設備,按約定的協(xié)議,將任何物體與網(wǎng)絡相連接,實現(xiàn)智能化識別、定位、跟蹤、監(jiān)管等功能的
    發(fā)表于 08-19 14:08

    聯(lián)網(wǎng)技術(shù)及其應用

    聯(lián)網(wǎng)技術(shù)及其應用
    發(fā)表于 08-16 19:21

    創(chuàng)新聯(lián)網(wǎng)技術(shù)的狂歡,四月《聯(lián)網(wǎng)技術(shù)特刊》領(lǐng)航!

    ` 本帖最后由 bewin 于 2014-5-5 18:59 編輯   電子發(fā)燒友網(wǎng)2014年4月《聯(lián)網(wǎng)技術(shù)特刊》火熱下載中,缺你怎可!  聯(lián)網(wǎng)是新一代信息
    發(fā)表于 05-05 18:14

    工業(yè)領(lǐng)域聯(lián)網(wǎng)技術(shù)

    本帖最后由 sinap_zhj 于 2016-1-24 18:19 編輯 聯(lián)網(wǎng)技術(shù)在工業(yè)領(lǐng)域具有廣泛的應用前景,是建設“智慧企業(yè)”,發(fā)展“智慧工業(yè)”的關(guān)鍵技術(shù)??梢詮囊韵聨讉€方面推進
    發(fā)表于 01-24 18:12

    聯(lián)網(wǎng)技術(shù)到底是什么技術(shù)

    電子、通信、計算機、IT行業(yè)技術(shù)的大融合。如圖,聯(lián)網(wǎng)技術(shù)技術(shù)組成(簡單版)。 聯(lián)網(wǎng)技術(shù)之一
    發(fā)表于 04-20 15:30

    福利直播,資深工程師教你NB-IOT聯(lián)網(wǎng)項目落地

    /546.html直播主題及亮點:本直播課程簡明介紹NB-IoT聯(lián)網(wǎng)技術(shù)的特點,適用場景,項目落地關(guān)鍵難點和注意點,方案及芯片選型,軟硬件設計要點,低功耗設計規(guī)范等。總之,本課程將幫
    發(fā)表于 08-20 19:04

    NB-IoT聯(lián)網(wǎng)項目落地關(guān)鍵技術(shù)分享

    ,方案及芯片選型,軟硬件設計要點,低功耗設計規(guī)范等。總之,本課程將幫助你快速掌握NBIOT項目開發(fā)的關(guān)鍵技術(shù),助力你的聯(lián)網(wǎng)項目快速落地。本
    發(fā)表于 08-22 10:30

    香蕉派(Banana Pi) 開源社區(qū)生態(tài)與聯(lián)網(wǎng)整體技術(shù)解決方案

    硬件與軟件的聯(lián)網(wǎng)技術(shù)整體解決方案技術(shù)積累。第2章:比派科技之開源軟硬件架構(gòu)
    發(fā)表于 03-23 15:45

    【專家問答】小熊派創(chuàng)始人與您分享聯(lián)網(wǎng)研發(fā)技術(shù)

    ,具有多年的嵌入式軟硬件開發(fā)、云平臺開發(fā)經(jīng)驗。作為華為云聯(lián)網(wǎng)云享專家,聯(lián)合華為舉辦過多次聯(lián)網(wǎng)線上線下的開發(fā)者活動,具備豐富的IoT開發(fā)指
    發(fā)表于 09-11 16:48

    聯(lián)網(wǎng)技術(shù)有什么優(yōu)勢及功能?

    聯(lián)網(wǎng)為什么會在最近幾年受到廣泛的關(guān)注呢?聯(lián)網(wǎng)技術(shù)有什么優(yōu)勢及功能?可穿戴設備、低功耗藍牙WiFi,哪個才是
    發(fā)表于 06-27 07:19

    聯(lián)網(wǎng)技術(shù)架構(gòu)

    聯(lián)網(wǎng)技術(shù)架構(gòu)1. 顯示端JavaScript,以java語言為主的Web框架等Spring全家桶,Android,IOS,微信公眾號,直接板載液晶顯示屏,觸摸屏,移植性比較好的QT2. 通信
    發(fā)表于 08-20 07:10

    聯(lián)想面向全球發(fā)布聯(lián)網(wǎng)軟硬件平臺

    當?shù)貢r間2月26日,在西班牙巴塞羅那舉行的MWC2019期間,聯(lián)想集團正式發(fā)布軟硬件一體聯(lián)網(wǎng)解決方案與開發(fā)套件,包括LeapIOT聯(lián)網(wǎng)
    的頭像 發(fā)表于 02-28 15:08 ?3593次閱讀

    基于FPGA芯片軟硬件平臺的使用

    基于FPGA芯片軟硬件平臺的使用
    發(fā)表于 07-01 09:35 ?20次下載

    開源聯(lián)網(wǎng)技術(shù)--TFT LCD屏驅(qū)動軟硬件計分

    一、聯(lián)網(wǎng)系統(tǒng)中為什么要使用 TFT-LCD屏 在聯(lián)網(wǎng)系統(tǒng)中使用TFT-LCD(薄膜晶體管液晶顯示器)驅(qū)動芯片的原因主要可以歸納為以下幾點
    的頭像 發(fā)表于 09-23 16:46 ?2220次閱讀
    <b class='flag-5'>開源</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)技術(shù)</b>--TFT LCD屏驅(qū)動<b class='flag-5'>軟硬件</b>設<b class='flag-5'>計分</b>享

    聯(lián)網(wǎng)中常見的I/O擴展電路設計方案_IIC I/O擴展芯片

    聯(lián)網(wǎng)系統(tǒng)中為什么要使用 IIC I/O擴展芯片 ?
    的頭像 發(fā)表于 09-24 11:29 ?1243次閱讀
    <b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>中常見的<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>擴展</b>電路設計方案_<b class='flag-5'>IIC</b> <b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>擴展</b><b class='flag-5'>芯片</b>

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品