tag 标签: IIC

相关博文
  • 2024-9-30 14:42
    114 次阅读|
    0 个评论
    01 物联网系统中为什么要使用IIC I/O扩展芯片 在物联网系统中使用IIC(也称为I2C)I/O扩展芯片的原因主要可以归结为以下几点: 1、扩大I/O端口数量 硬件资源限制:许多微控制器(MCU)自带的I/O端口数量有限,但物联网项目往往需要连接大量的传感器、执行器和其他外设。I2C I/O扩展芯片能够通过I2C接口提供额外的I/O端口,从而满足项目需求。 灵活性:通过扩展芯片,设计者可以根据项目需求灵活增加或减少外设连接,而无需更换主控制器。 2、简化布线和连接 减少引脚需求:I2C总线仅需要两根线(SCL时钟线和SDA数据线)即可实现多个设备之间的通信,这大大减少了系统布线的复杂性和成本。 便于管理:通过I2C总线连接的设备可以使用统一的通信协议进行通信,简化了系统的维护和管理工作。 3、提高系统性能 高效通信:I2C协议具有高效的通信机制,能够支持高速数据传输,提高系统的整体性能。 时钟控制:I2C I/O扩展芯片可以控制外部设备的时钟,有助于优化系统的时序控制,提高系统的稳定性和可靠性。 4、降低成本和功耗 减少元件数量:使用I2C I/O扩展芯片可以减少系统中其他类型扩展元件的使用,从而降低整体成本。 低功耗:I2C总线支持低功耗模式,有助于降低系统的整体功耗,延长电池寿命(在便携式或无线物联网设备中尤为重要)。 5、广泛应用场景 传感器网络 :在物联网系统中,传感器是不可或缺的组成部分。I2C I/O扩展芯片可以方便地连接各种类型的传感器(如温度、湿度、加速度计等),实现数据的采集和传输。 工业自动化 :在工业自动化领域,PLC等控制系统需要与大量外设进行通信。I2C I/O扩展芯片能够满足这一需求,提高工业自动化系统的集成度和可靠性。 智能家居 :智能家居系统需要连接和控制各种智能家电和设备。I2C I/O扩展芯片可以扩展智能家居系统的控制能力,实现更多样化的功能。 工业自动化和控制 :在工业自动化系统中,经常需要连接和控制大量的传感器、执行器和其他设备。IIC IO扩展芯片可以提供更多的IO端口,以便与这些设备进行通信和控制。例如,它们可以用于读取传感器的数据、控制执行器的动作或与其他工业设备进行交互。 消费电子产品 :在消费电子产品中,如智能家居设备、智能音箱、智能手环等,IIC IO扩展芯片也发挥着重要作用。它们可以用于扩展设备的IO接口,以便连接更多的外部设备或传感器。例如,智能音箱可以通过IIC IO扩展芯片连接更多的麦克风或扬声器,提高音频处理的性能和质量。 嵌入式系统 :在嵌入式系统中,由于资源限制和成本考虑,微控制器的IO端口数量往往有限。IIC IO扩展芯片可以有效地解决这个问题,为嵌入式系统提供额外的IO端口。这些端口可以用于连接外部设备、扩展系统功能或实现与其他系统的通信。 测试与测量设备 :在测试和测量领域,IIC IO扩展芯片可以用于连接各种测试设备和传感器。通过扩展IO端口,测试设备可以获取更多的数据输入,提高测试的准确性和效率。同时,IIC IO扩展芯片还可以用于控制测试过程中的各种设备和参数。 医疗设备 :在医疗设备中,IIC IO扩展芯片可以用于连接各种医疗传感器和执行器。例如,在监护仪中,IIC IO扩展芯片可以连接多个生命体征传感器,实时监测患者的血压、心率等生理参数。在医疗机器人中,IIC IO扩展芯片可以控制机器人的运动和操作。 综上所述, IIC(I2C)I/O扩展芯片在物联网系统中扮演着重要角色,它们通过提供额外的I/O端口、简化布线和连接、提高系统性能、降低成本和功耗以及支持广泛应用场景等方式,为物联网系统的设计和实现带来了诸多便利和优势。 02 IIC I/O扩展芯片的行业知识介绍 IIC I/O扩展芯片定义 IIc接口IO扩展芯片是一种可以为电子设备添加输入输出功能的集成电路,它可以有效提高设备的性能。 IIC 原理 I²C通信协议 :I²C是一种串行通信协议,用于连接微控制器及其外围设备。它只需要两根线(SDA数据线和SCL时钟线)即可实现全双工通信,同时还可以连接多个设备到同一总线上。 设备寻址 :每个I²C设备都有一个唯一的地址,主控制器通过发送设备的地址来选中并与之通信。I²C扩展IO芯片也具备一个或多个可设置的地址,以便主控制器能够识别并与之通信。 数据传输 :在选中特定的I²C设备后,主控制器可以通过I²C总线发送数据到该设备,或者从该设备读取数据。对于I²C扩展IO芯片,主控制器可以发送命令来设置或读取IO端口的电平状态,从而实现对外围设备的控制或监测。 中断机制 :许多I²C扩展IO芯片还具备中断功能。当IO端口的电平状态发生变化时,芯片可以产生一个中断信号,通知主控制器进行相应的处理。这样,主控制器可以更加高效地响应外部事件,而无需持续轮询IO端口的状态。 内部寄存器 :I²C扩展IO芯片内部通常包含多个寄存器,用于存储IO端口的配置信息、数据等。主控制器可以通过I²C总线访问这些寄存器,以实现对IO端口的控制和管理。 IIC I/O扩展芯片的参数选型 电源电压 :确保你的系统电源电压与IO扩展芯片的电源电压兼容。常见的电源电压范围包括1.8V、3.3V、5V等。 IO口数量 :根据你的应用需求确定所需的IO口数量。有些IO扩展芯片提供8个、16个或更多的IO口。 IO口类型 :考虑你需要的IO口类型,如准双向口、开漏输出等。准双向口既可以作为输入也可以作为输出,而开漏输出则可以用于驱动LED等外部设备。 通信接口 :确保IO扩展芯片支持你的主控制器所使用的通信接口,如I²C、SPI等。I²C接口通常使用两根线(SDA和SCL)进行通信,具有简单易用、支持多设备连接等优点。 中断功能 :如果你的应用需要实时监测外部设备状态的变化,那么选择具有中断功能的IO扩展芯片将非常有用。当中断引脚被触发时,主控制器可以立即响应并处理相应的事件。 封装和尺寸 :根据你的应用需求和电路板空间限制选择合适的封装和尺寸。常见的封装类型包括TSSOP、QFN、SSOP等,尺寸范围也有所不同。 工作温度和功耗 :考虑你的应用所在的环境温度和功耗要求。选择具有适当工作温度和低功耗的IO扩展芯片将有助于提高系统的稳定性和可靠性。 其他特性 :根据你的应用需求,还可以考虑其他特性,如驱动能力(最大输出电流)、输入/输出电平范围、可编程性(是否支持通过编程来配置IO口)等。 IIC I/O扩展芯片的厂商 NXP Semiconductors(恩智浦半导体) :NXP是全球领先的半导体公司之一,提供广泛的IIC IO扩展芯片产品。其产品线包括PCF8574、PCA9555等,这些芯片具有高性能、低功耗和易用性等特点,广泛应用于各种领域。 Microchip Technology(微芯科技) :Microchip是一家专注于嵌入式控制和混合信号半导体解决方案的供应商。其IIC IO扩展芯片产品包括MCP23017、MCP23S17等,这些芯片具有高集成度、高可靠性和低功耗等特点,适用于工业自动化、消费电子和汽车电子等领域。 Texas Instruments(德州仪器) :德州仪器是一家全球性的半导体设计和制造公司,其IIC IO扩展芯片产品包括TPS2113、TPS2296等。这些芯片具有高性能、高精度和低功耗等特点,广泛应用于电源管理、电机控制和工业自动化等领域。 STMicroelectronics(意法半导体) :意法半导体是一家全球领先的半导体公司,提供广泛的IIC IO扩展芯片产品。其产品线包括VLSI Solution的82C55A等,这些芯片具有高速、高可靠性和低功耗等特点,适用于各种嵌入式系统和工业自动化应用。 此外,还有其他一些厂商也提供IIC IO扩展芯片产品,如Maxim Integrated、Renesas Electronics等。在选择IIC IO扩展芯片时,需要根据具体的应用需求和性能要求来选择合适的厂商和产品。国内也有一些知名的IIC(实际上是I²C,即Inter-Integrated Circuit)IO扩展芯片厂商,以下是一些例子: 中微爱芯 :作为中国领先的半导体公司之一,中微爱芯专注于消费电子芯片和小家电芯片的研发。他们的产品可能包括IIC IO扩展芯片,但具体型号和规格可能需要查询其官方渠道。 紫光展锐 :紫光展锐是中国集成电路设计和解决方案供应商,他们在移动通信、数字多媒体等领域积累了丰富的经验。虽然他们主要以手机芯片闻名,但他们的产品线可能也涵盖IIC IO扩展芯片。 华大半导体 :华大半导体是中国电子信息产业集团有限公司(CEC)旗下的核心企业,是中国“909”工程集成电路项目的重点承担单位。他们提供多种类型的半导体产品,包括可能包含IIC IO扩展芯片的产品。 03 IIC I/O扩展芯片的硬件设计方案 本文主要采用了信路达的XL9535做为驱动芯片。 1、XL9535概述 XL9535是一款24引脚CMOS器件,通过I²C总线/SMBus接口 串行时钟线(SCL)、串行数据(SDA)为大多数微控制器系列提供16位通用并行输入/输出(GPIO)扩展。这些设备设计用于2.3-V至5.5-V Vcc操作。这些改进包括更高的驱动能力、5V I/O容差、更低的电源电流、单独的I/O配置和更小的封装。 通电时,I/O被配置为输入。系统主机可以通过写入I/O配置位来启用I/O作为输入或输出。每个输入或输出的数据都保存在相应的输入或输出寄存器中。输入端口寄存器的极性可以用极性反转寄存器反转。所有寄存器均可由系统主控器读取。 当任何输入状态与其对应的输入端口寄存器状态不同时,这些设备开漏中断(/INT)输出被激活,并用于向系统主机指示输入状态已改变。在超时或其他不当操作的情况下,系统主设备可以利用上电重置功能重置这些设备。通电重置将寄存器设置为默认值,并初始化I²C/SMBus状态机。三个硬件引脚(A0、A1和A2)改变固定的I²C总线地址, 并允许多达八个设备共享同一I²C总线/SMBus。 2、 XL9535特性 I²C总线至16位GPIO扩展器 工作电源电压范围为2.3 V至5.5 V 低待机电流消耗 5 V容错I/O端口 400 kHz快速模式I²C总线时钟频率 SCL/SDA输入上的噪声滤波器 内部通电复位 通电时无故障 极性反转寄存器 开漏有源低中断输出 16个I/O引脚,默认为16个输入 3、XL9535引脚配置和功能 4、XL9535功能框图和参考设计 04 IIC I/O扩展芯片的软件设计方案 本文采用了奇迹物联的红豆版开源技术平台为主控单元,一步步手把手教会读者如何使用红豆版开源平台编写XL9535驱动。这里对代码就不多详解,如果需要详细了解,请到奇迹物联的红豆版开源平台了解详细代码讲解。 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\3rd\1.0_XL9535 Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\3rd\1.0_XL9535 2 组件功能介绍 驱动XL9535芯片,实现输入IO检测。 3 代码讲解 1 drv_xl9535_i2c_init 功能:该函数用于,将发送数据长度写入xl9535寄存器。 参数:五 返回值:无 示例: C //初始化i2c总线 ret = drv_xl9535_i2c_init(); 2 drv_xl9535_i2c_read 功能:该函数用于,读取I2C从机。 参数:五 返回值:无 示例: C RegAddr = 0x00; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 00 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); 3 drv_xl9535_i2c_write 功能:该函数用于,发送数据到I2C从机。 参数:五 返回值:无 示例: C RegAddr = 0x06; RegWriteValue = 0xFF; ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%d\n", RegWriteValue, ret); 4 Demo实战 4.1 概述 上电后,按下按键,串口会打印出按下了哪一个按键 4.2 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.3 宏定义介绍 sample_xl9535_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 sample_xl9535_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 SAMPLE_XL9535_STACK_SIZE 栈空间宏定义 4.4 全局变量介绍 sample_xl9535_int_detect_stack_ptr 任务栈空间,本例使用数组实现,用户在做项目时,可以预先估算下当先任务需要的大致栈空间,OS没有提供可以查看栈空间使用情况的API sample_xl9535_int_detect_task_ref 任务指针 4.5 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化INT 引脚 代码片段: C int ret = 0; GPIOConfiguration config = {0}; //创建定时器 OSATimerCreate(&sample_xl9535_int_detect_timer_ref); //创建中断事件 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); //创建中断处理任务 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 主任务,代码发分为两部分,一部分是发送不定长数据;另一部分是上电后等待其它模块发送的数据,收到后打印到串口。 代码片段: C 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=%d\n", RegReadValue0, ret); RegAddr = 0x01; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 01 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x02; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 02 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x03; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 03 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x04; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 04 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x05; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 05 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x06; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 06 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x07; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 07 i2c value=0x%x, ret=%d\n", 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=%d\n", RegWriteValue, ret); RegAddr = 0x07; RegWriteValue = 0xFF; ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%d\n", RegWriteValue, ret); while(1) { // sample_xl9535_catstudio_printf("sample_xl9535_detect_task\r\n"); status = OSAFlagWait(sample_xl9535_int_detect_flg_ref, 0x01, OSA_FLAG_OR_CLEAR, &flag_value, OSA_SUSPEND); //红豆版,设置了边沿,但是还是会上升沿,下降沿都触发,所以会执行两次 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=%d\n", 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=%d\n", RegReadValue1, ret); //寄存器值非默认值,表示有io输入,否则表示是上升沿中断 if(RegReadValue0 != 0xff || RegReadValue1 != 0x07) { event_ticks = OSAGetTicks(); int_status = 0; //判断是那个IO这里使用寄存器值判断,后续可以改为根据位判断 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; 20) { //检测到某个IO被按下后,可以在这里,或者发送信号,消息等去其它任务执行相应操作 // 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 固件 上电后,按下按键,串口会打印出按下了哪一个按键 注:本文部分内容来源于网络,如有侵权,请及时联系我们。 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)
  • 2024-9-30 12:26
    114 次阅读|
    0 个评论
    01 概述 XL9535是一款24引脚CMOS器件, 通过I²C总线/SMBus接口 串行时钟线(SCL)、串行数据(SDA)为大多数微控制器系列提供16位通用并行输入/输出(GPIO)扩展。 这些设备设计用于2.3-V至5.5-V Vcc操作。这些改进包括更高的驱动能力、5V I/O容差、更低的电源电流、单独的I/O配置和更小的封装。 通电时,I/O被配置为输入。系统主机可以通过写入I/O配置位来启用I/O作为输入或输出。每个输入或输出的数据都保存在相应的输入或输出寄存器中。输入端口寄存器的极性可以用极性反转寄存器反转。所有寄存器均可由系统主控器读取。 当任何输入状态与其对应的输入端口寄存器状态不同时,这些设备开漏中断(/INT)输出被激活,并用于向系统主机指示输入状态已改变。在超时或其他不当操作的情况下,系统主设备可以利用上电重置功能重置这些设备。通电重置将寄存器设置为默认值,并初始化I²C/SMBus状态机。三个硬件引脚(A0、A1和A2)改变固定的I²C总线地址,并允许多达八个设备共享同一I²C总线/SMBus。 02 特性 I²C总线至16位GPIO扩展器 工作电源电压范围为2.3 V至5.5 V 低待机电流消耗 5 V容错I/O端口 400 kHz快速模式I²C总线时钟频率 SCL/SDA输入上的噪声滤波器 内部通电复位 通电时无故障 极性反转寄存器 开漏有源低中断输出 16个I/O引脚,默认为16个输入 03 引脚配置和功能 04 功能框图 05 XL9535组件的使用 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\3rd\1.0_XL9535 Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\3rd\1.0_XL9535 2 组件功能介绍 驱动XL9535芯片,实现输入IO检测。 3 代码讲解 1 drv_xl9535_i2c_init 功能:该函数用于,将发送数据长度写入xl9535寄存器。 参数:五 返回值:无 示例: C //初始化i2c总线 ret = drv_xl9535_i2c_init(); 2 drv_xl9535_i2c_read 功能:该函数用于,读取I2C从机。 参数:五 返回值:无 示例: C RegAddr = 0x00; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 00 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); 3 drv_xl9535_i2c_write 功能:该函数用于,发送数据到I2C从机。 参数:五 返回值:无 示例: C RegAddr = 0x06; RegWriteValue = 0xFF; ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%d\n", RegWriteValue, ret); 4 Demo实战 4.1 概述 上电后,按下按键,串口会打印出按下了哪一个按键 4.2 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.3 宏定义介绍 sample_xl9535_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 sample_xl9535_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 SAMPLE_XL9535_STACK_SIZE 栈空间宏定义 4.4 全局变量介绍 sample_xl9535_int_detect_stack_ptr 任务栈空间,本例使用数组实现,用户在做项目时,可以预先估算下当先任务需要的大致栈空间,OS没有提供可以查看栈空间使用情况的API sample_xl9535_int_detect_task_ref 任务指针 4.5 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化INT 引脚 代码片段: C int ret = 0; GPIOConfiguration config = {0}; //创建定时器 OSATimerCreate(&sample_xl9535_int_detect_timer_ref); //创建中断事件 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); //创建中断处理任务 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 主任务,代码发分为两部分,一部分是发送不定长数据;另一部分是上电后等待其它模块发送的数据,收到后打印到串口。 代码片段: C 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=%d\n", RegReadValue0, ret); RegAddr = 0x01; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 01 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x02; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 02 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x03; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 03 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x04; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 04 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x05; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 05 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x06; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 06 i2c value=0x%x, ret=%d\n", RegReadValue0, ret); RegAddr = 0x07; ret = drv_xl9535_i2c_read(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("read reg 07 i2c value=0x%x, ret=%d\n", 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=%d\n", RegWriteValue, ret); RegAddr = 0x07; RegWriteValue = 0xFF; ret = drv_xl9535_i2c_write(&RegAddr, &RegReadValue0); sample_xl9535_catstudio_printf("write i2c value=0x%x, ret=%d\n", RegWriteValue, ret); while(1) { // sample_xl9535_catstudio_printf("sample_xl9535_detect_task\r\n"); status = OSAFlagWait(sample_xl9535_int_detect_flg_ref, 0x01, OSA_FLAG_OR_CLEAR, &flag_value, OSA_SUSPEND); //红豆版,设置了边沿,但是还是会上升沿,下降沿都触发,所以会执行两次 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=%d\n", 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=%d\n", RegReadValue1, ret); //寄存器值非默认值,表示有io输入,否则表示是上升沿中断 if(RegReadValue0 != 0xff || RegReadValue1 != 0x07) { event_ticks = OSAGetTicks(); int_status = 0; //判断是那个IO这里使用寄存器值判断,后续可以改为根据位判断 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; 20) { //检测到某个IO被按下后,可以在这里,或者发送信号,消息等去其它任务执行相应操作 // 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 固件 上电后,按下按键,串口会打印出按下了哪一个按键 注:本文部分内容来源于网络,如有侵权,请及时联系我们。 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)
  • 2024-9-26 11:21
    209 次阅读|
    0 个评论
    01 物联网系统中为什么要使用IIC I/O扩展芯片 在物联网系统中使用IIC(也称为I2C)I/O扩展芯片的原因主要可以归结为以下几点: 1、扩大I/O端口数量 硬件资源限制:许多微控制器(MCU)自带的I/O端口数量有限,但物联网项目往往需要连接大量的传感器、执行器和其他外设。I2C I/O扩展芯片能够通过I2C接口提供额外的I/O端口,从而满足项目需求。 灵活性:通过扩展芯片,设计者可以根据项目需求灵活增加或减少外设连接,而无需更换主控制器。 2、简化布线和连接 减少引脚需求:I2C总线仅需要两根线(SCL时钟线和SDA数据线)即可实现多个设备之间的通信,这大大减少了系统布线的复杂性和成本。 便于管理:通过I2C总线连接的设备可以使用统一的通信协议进行通信,简化了系统的维护和管理工作。 3、提高系统性能 高效通信:I2C协议具有高效的通信机制,能够支持高速数据传输,提高系统的整体性能。 时钟控制:I2C I/O扩展芯片可以控制外部设备的时钟,有助于优化系统的时序控制,提高系统的稳定性和可靠性。 4、降低成本和功耗 减少元件数量:使用I2C I/O扩展芯片可以减少系统中其他类型扩展元件的使用,从而降低整体成本。 低功耗:I2C总线支持低功耗模式,有助于降低系统的整体功耗,延长电池寿命(在便携式或无线物联网设备中尤为重要) 。 5、广泛应用场景 传感器网络:在物联网系统中,传感器是不可或缺的组成部分。I2C I/O扩展芯片可以方便地连接各种类型的传感器(如温度、湿度、加速度计等),实现数据的采集和传输。 工业自动化:在工业自动化领域,PLC等控制系统需要与大量外设进行通信。I2C I/O扩展芯片能够满足这一需求,提高工业自动化系统的集成度和可靠性。 智能家居:智能家居系统需要连接和控制各种智能家电和设备。I2C I/O扩展芯片可以扩展智能家居系统的控制能力,实现更多样化的功能。 工业自动化和控制:在工业自动化系统中,经常需要连接和控制大量的传感器、执行器和其他设备。IIC IO扩展芯片可以提供更多的IO端口,以便与这些设备进行通信和控制。例如,它们可以用于读取传感器的数据、控制执行器的动作或与其他工业设备进行交互。 消费电子产品:在消费电子产品中,如智能家居设备、智能音箱、智能手环等,IIC IO扩展芯片也发挥着重要作用。它们可以用于扩展设备的IO接口,以便连接更多的外部设备或传感器。例如,智能音箱可以通过IIC IO扩展芯片连接更多的麦克风或扬声器,提高音频处理的性能和质量。 嵌入式系统:在嵌入式系统中,由于资源限制和成本考虑,微控制器的IO端口数量往往有限。IIC IO扩展芯片可以有效地解决这个问题,为嵌入式系统提供额外的IO端口。这些端口可以用于连接外部设备、扩展系统功能或实现与其他系统的通信。 测试与测量设备:在测试和测量领域,IIC IO扩展芯片可以用于连接各种测试设备和传感器。通过扩展IO端口,测试设备可以获取更多的数据输入,提高测试的准确性和效率。同时,IIC IO扩展芯片还可以用于控制测试过程中的各种设备和参数。 医疗设备:在医疗设备中,IIC IO扩展芯片可以用于连接各种医疗传感器和执行器。例如,在监护仪中,IIC IO扩展芯片可以连接多个生命体征传感器,实时监测患者的血压、心率等生理参数。在医疗机器人中,IIC IO扩展芯片可以控制机器人的运动和操作。 综上所述,IIC(I2C)I/O扩展芯片在物联网系统中扮演着重要角色,它们通过提供额外的I/O端口、简化布线和连接、提高系统性能、降低成本和功耗以及支持广泛应用场景等方式,为物联网系统的设计和实现带来了诸多便利和优势。 02 IIC I/O扩展芯片定义 IIc接口IO扩展芯片是一种可以为电子设备添加输入输出功能的集成电路,它可以有效提高设备的性能。 IIC 原理 I²C通信协议 :I²C是一种串行通信协议,用于连接微控制器及其外围设备。它只需要两根线(SDA数据线和SCL时钟线)即可实现全双工通信,同时还可以连接多个设备到同一总线上。 设备寻址 :每个I²C设备都有一个唯一的地址,主控制器通过发送设备的地址来选中并与之通信。I²C扩展IO芯片也具备一个或多个可设置的地址,以便主控制器能够识别并与之通信。 数据传输 :在选中特定的I²C设备后,主控制器可以通过I²C总线发送数据到该设备,或者从该设备读取数据。对于I²C扩展IO芯片,主控制器可以发送命令来设置或读取IO端口的电平状态,从而实现对外围设备的控制或监测。 中断机制 :许多I²C扩展IO芯片还具备中断功能。当IO端口的电平状态发生变化时,芯片可以产生一个中断信号,通知主控制器进行相应的处理。这样,主控制器可以更加高效地响应外部事件,而无需持续轮询IO端口的状态。 内部寄存器 :I²C扩展IO芯片内部通常包含多个寄存器,用于存储IO端口的配置信息、数据等。主控制器可以通过I²C总线访问这些寄存器,以实现对IO端口的控制和管理。 03 IIC I/O扩展芯片的参数选型 电源电压 :确保你的系统电源电压与IO扩展芯片的电源电压兼容。常见的电源电压范围包括1.8V、3.3V、5V等。 IO口数量 :根据你的应用需求确定所需的IO口数量。有些IO扩展芯片提供8个、16个或更多的IO口。 IO口类型 :考虑你需要的IO口类型,如准双向口、开漏输出等。准双向口既可以作为输入也可以作为输出,而开漏输出则可以用于驱动LED等外部设备。 通信接口 :确保IO扩展芯片支持你的主控制器所使用的通信接口,如I²C、SPI等。I²C接口通常使用两根线(SDA和SCL)进行通信,具有简单易用、支持多设备连接等优点。 中断功能 :如果你的应用需要实时监测外部设备状态的变化,那么选择具有中断功能的IO扩展芯片将非常有用。当中断引脚被触发时,主控制器可以立即响应并处理相应的事件。 封装和尺寸 :根据你的应用需求和电路板空间限制选择合适的封装和尺寸。常见的封装类型包括TSSOP、QFN、SSOP等,尺寸范围也有所不同。 工作温度和功耗 :考虑你的应用所在的环境温度和功耗要求。选择具有适当工作温度和低功耗的IO扩展芯片将有助于提高系统的稳定性和可靠性。 其他特性 :根据你的应用需求,还可以考虑其他特性,如驱动能力(最大输出电流)、输入/输出电平范围、可编程性(是否支持通过编程来配置IO口)等。 04 IIC I/O扩展芯片的厂商 NXP Semiconductors(恩智浦半导体) :NXP是全球领先的半导体公司之一,提供广泛的IIC IO扩展芯片产品。其产品线包括PCF8574、PCA9555等,这些芯片具有高性能、低功耗和易用性等特点,广泛应用于各种领域。 Microchip Technology(微芯科技) :Microchip是一家专注于嵌入式控制和混合信号半导体解决方案的供应商。其IIC IO扩展芯片产品包括MCP23017、MCP23S17等,这些芯片具有高集成度、高可靠性和低功耗等特点,适用于工业自动化、消费电子和汽车电子等领域。 Texas Instruments(德州仪器) :德州仪器是一家全球性的半导体设计和制造公司,其IIC IO扩展芯片产品包括TPS2113、TPS2296等。这些芯片具有高性能、高精度和低功耗等特点,广泛应用于电源管理、电机控制和工业自动化等领域。 STMicroelectronics(意法半导体) :意法半导体是一家全球领先的半导体公司,提供广泛的IIC IO扩展芯片产品。其产品线包括VLSI Solution的82C55A等,这些芯片具有高速、高可靠性和低功耗等特点,适用于各种嵌入式系统和工业自动化应用。 此外,还有其他一些厂商也提供IIC IO扩展芯片产品,如Maxim Integrated、Renesas Electronics等。在选择IIC IO扩展芯片时,需要根据具体的应用需求和性能要求来选择合适的厂商和产品。国内也有一些知名的IIC(实际上是I²C,即Inter-Integrated Circuit)IO扩展芯片厂商,以下是一些例子: 中微爱芯 :作为中国领先的半导体公司之一,中微爱芯专注于消费电子芯片和小家电芯片的研发。他们的产品可能包括IIC IO扩展芯片,但具体型号和规格可能需要查询其官方渠道。 紫光展锐 :紫光展锐是中国集成电路设计和解决方案供应商,他们在移动通信、数字多媒体等领域积累了丰富的经验。虽然他们主要以手机芯片闻名,但他们的产品线可能也涵盖IIC IO扩展芯片。 华大半导体 :华大半导体是中国电子信息产业集团有限公司(CEC)旗下的核心企业,是中国“909”工程集成电路项目的重点承担单位。他们提供多种类型的半导体产品,包括可能包含IIC IO扩展芯片的产品。 供应商A:信路达 1、产品能力 (1)选型手册 (2)主推型号1:XL9535 对应的产品详情介绍 该IC(XL9535)是一款24引脚CMOS器件,通过I²C总线/SMBus接口 为大多数微控制器系列提供16位通用并行输入/输出(GPIO)扩展。这些设备设计用于2.3-V至5.5-V VCC操作。这些改进包括更高的驱动能力、5V I/O容差、更低的电源电流、单独的I/O配置和更小的封装。当ACPI电源开关、传感器、按钮、LED、风扇等需要额外的I/O时,I/O扩展器提供了一个简单的解决方案。当任何输入状态与其对应的输入端口寄存器状态不同时,这些设备开漏中断(/INT)输出被激活,并用于向系统主机指示输入状态已改变。在超时或其他不当操作的情况下,系统主设备可以利用上电重置功能重置这些设备。通电重置将寄存器设置为默认值,并初始化I²C/SMBus状态机。三个硬件引脚(A0、A1和A2)改变固定的I²C总线地址,并允许多达八个设备共享同一I²C总线/SMBus。 功能特点: I²C总线至16位GPIO扩展器 工作电源电压范围为2.3 V至5.5 V 低待机电流消耗 5 V容错I/O端口 400 kHz快速模式I²C总线时钟频率 SCL/SDA输入上的噪声滤波器 内部通电复位 通电时无故障 极性反转寄存器 开漏有源低中断输出 16个I/O引脚,默认为16个输入 硬件参考设计 核心料(哪些项目在用) 奇迹物联全网通信号测试仪项目IO扩展 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)
  • 2024-9-25 10:42
    225 次阅读|
    0 个评论
    物联网系统中为什么要使用数字式温度传感器芯片 物联网系统中使用数字式温度传感器芯片的原因主要有以下几点: 高精度与稳定性 高精度测量:数字式温度传感器芯片,如DS18B20,采用芯片集成技术,能够有效抑制外界不同程度的干扰,从而提供高精度的温度测量。这对于物联网系统来说至关重要,因为准确的温度数据是许多应用(如冷链监控、智能家居温控等)的基础。 稳定性强:相较于模拟式温度传感器,数字式芯片在电路设计、信号处理等方面更加稳定,减少了因电路波动或环境变化导致的测量误差。 直接数字输出与易处理 直接数字输出:数字式温度传感器芯片直接输出串行数字信号,无需进行模拟到数字的转换,简化了后续的数据处理流程。这对于物联网系统中的微控制器或处理器来说,可以直接接收并处理这些数字信号,提高了系统的整体效率和响应速度。 接口简单:数字式温度传感器的接口设计简洁,便于与物联网系统中的其他设备进行连接和通信。这降低了系统集成的复杂度,并提高了系统的可扩展性。 抗干扰能力强 单总线技术:许多数字式温度传感器芯片采用单总线技术,这种技术不仅简化了通信线路,还增强了芯片的抗干扰能力。在物联网环境中,各种设备通过无线网络进行通信,容易受到电磁干扰等因素的影响。数字式温度传感器的抗干扰能力能够有效保障数据的准确传输。 成本控制与开发周期 成本控制:虽然数字式温度传感器芯片在初始投资上可能略高于某些模拟式传感器,但其高精度、稳定性和易处理的特点使得系统整体成本得到有效控制。此外,随着生产规模的扩大和技术的成熟,数字式传感器的成本也在不断降低。 缩短开发周期:数字式温度传感器芯片的设计简洁、易于使用,有助于缩短物联网系统的开发周期。开发人员可以更快地完成传感器的集成和调试工作,从而加速产品的上市速度。 具体应用场景 智能家居 在智能家居中,数字温度传感器被广泛应用于室内环境温度的测量和控制。通过将数字温度传感器嵌入到智能家居设备中,如空调、地暖、暖气等,可以实现对室内温度的自动优化调节,提高用户的生活舒适度。这些传感器能够实时监测室内温度,并根据预设的温度范围自动调节设备的工作状态,从而实现节能和舒适度的平衡。 医疗设备 在医疗设备中,数字温度传感器也发挥着重要作用。它们通常被用于体温测量或手术过程中的温度监测等方面。相比传统的温度计测量方式,数字温度传感器具有精度高、响应快等优点,能够更加准确地反映体温的变化情况,为医疗人员提供更加科学有效的诊断依据。同时,在医疗设备的温度控制系统中,数字温度传感器也扮演着重要角色,确保设备在适宜的温度下运行,保障患者的安全。 工业控制 在工业控制领域,数字温度传感器被广泛应用于温度控制和保护。通过将数字温度传感器嵌入到工业设备中,如熔炉、烤箱、冶金设备等,可以实现对设备内部温度的实时监测和控制。这有助于确保生产过程中的温度稳定性,提高生产效率和产品质量。同时,在设备出现过热等异常情况时,数字温度传感器能够迅速发出警报,保护设备免受损坏,降低生产风险。 农业领域 在农业领域,数字温度传感器也被用于监测和控制温室、大棚等农业设施的温度。通过实时监测温度,农民可以了解农作物的生长环境,并采取相应的措施来调节温度,为农作物提供适宜的生长条件。这有助于提高农作物的产量和品质,促进农业生产的可持续发展。 其他领域 除了以上几个领域外,数字温度传感器还广泛应用于其他多个领域。例如,在汽车电子中,数字温度传感器被用于监测发动机冷却水温度、进气温度等参数;在航空航天领域,数字温度传感器被用于监测飞机、火箭等设备的温度状况;在环境监测中,数字温度传感器被用于监测大气温度、海洋温度等环境参数。 综上所述,物联网系统中使用数字式温度传感器芯片可以带来高精度、稳定性、易处理、抗干扰能力强以及成本控制和开发周期缩短等多重优势。这些优势使得数字式温度传感器芯片成为物联网系统中不可或缺的重要组件。 本文会再为大家详解数字式温度传感器芯片。 数字式温度传感器芯片定义: 数字式温度传感器(芯片):就是能把温度物理量和湿度物理量,通过温度敏感元件和相应电路转换成方便计算机、plc、智能仪表等数据采集设备直接读取得数字量的传感器。 数字温度传感器(芯片)是在20世纪90年代中期问世的。它是微电子技术、计算机技术和自动测试技术(ATE)的结晶。目前,国际上已开发出多种数字温度传感器(芯片)系列产品。数字温度传感器(芯片)内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。数字温度传感器(芯片)的特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU);并且它是在硬件的基础上通过软件来实现测试功能的,其智能化也取决于软件的开发水平。 数字式温度传感器芯片产品原理: 数字式温度传感器(芯片)采用硅工艺生产的数字式温度传感器,其采用PTAT结构,这种半导体结构具有精确的,与温度相关的良好输出特性。PTAT的输出通过占空比比较器调制成数字信号,占空比与温度的关系如下式:DC=0.32 0.0047*t,t为摄氏度。输出数字信号故与微处理器MCU兼容,通过处理器的高频采样可算出输出电压方波信号的占空比,即可得到温度。该款温度传感器因其特殊工艺,分辨率优于0.005K。 数字式温度传感器芯片 测温过程:将敏感元件、A/D转换单元、存储器等集成在一个芯片上,直接输出反应被测温度的数字信号,使用方便,但响应速度较慢(100ms数量级)。如温度IC,温度集成电路(IC)是一种数字温度传感器,它有非常线性的电压∕电流—温度关系。有些IC传感器甚至有代表温度、并能被微处理器直接读出的数字输出形式。有两类具有如下温度关系的温度IC:电压IC: 10 mV/K;电流IC: 1μA/K。 开始供电时,数字温度传感器(芯片)处于能量关闭状态,供电之后用户通过改变寄存器分辨率使其处于连续转换温度模式或者单一转换模式。在连续转换模式下,数字温度传感器(芯片)连续转换温度并将结果存于温度寄存器中,读温度寄存器中的内容不影响其温度转换;在单一转换模式,数字温度传感器(芯片)执行一次温度转换,结果存于温度寄存器中,然后回到关闭模式,这种转换模式适用于对温度敏感的应用场合。在应用中,用户可以通过程序设置分辨率寄存器来实现不同的温度分辨率,其分辨率有8位、9位、10位、11位或12位五种,对应温度分辨率分别为1.0℃、0.5℃、0.25℃、0.125℃或0.0625℃,温度转换结果的默认分辨率为9位。 数字式温度传感器芯片优缺点: 数字温度传感器芯片的优点 高精度:数字温度传感器芯片通常具有较高的测量精度和稳定性,能够提供更准确的温度读数。这得益于其内置的模数转换器(ADC)和校准算法,使得温度信号在转换为数字信号时更加精确。 快速响应:数字温度传感器芯片的响应速度通常比模拟温度传感器更快,因为它们能够实时监测并快速反馈温度变化。这种快速响应特性对于需要实时温度控制的场合尤为重要。 抗干扰能力强:数字温度传感器芯片采用数字信号输出,相比模拟信号,数字信号在传输过程中更不容易受到电磁干扰和噪声的影响,从而提高了系统的稳定性和可靠性。 易于集成和处理:数字温度传感器芯片可以直接与数字电路连接,无需进行信号放大、滤波和模数转换等复杂处理过程,简化了电路设计,降低了系统成本。同时,数字信号也便于进行数字信号处理和远程传输。 低功耗:由于数字温度传感器芯片采用先进的CMOS工艺制造,其功耗通常较低,适合用于电池供电等对电源要求较高的场合。 模拟温度传感器的优点 成本较低:在某些情况下,模拟温度传感器的成本可能低于数字温度传感器芯片,尤其是对于一些简单的温度测量应用。 适应性强:模拟温度传感器可以适应更广泛的温度范围和工作环境条件,因为它们通常不需要额外的电源或复杂的电路支持。 数字温度传感器芯片的缺点 价格较高:相比模拟温度传感器,数字温度传感器芯片通常价格较高。这主要是由于其生产工艺复杂、集成度高以及附加功能多等因素导致的。然而,随着生产技术的不断进步和市场规模的扩大,数字温度传感器芯片的价格有望逐渐降低。 需要外部电源:虽然数字温度传感器芯片本身功耗较低,但仍然需要外部电源供电。在一些低功耗或无电源的应用场景中,这可能会成为一个限制因素。然而,随着低功耗设计技术的发展,一些数字温度传感器芯片已经能够实现自供电或低功耗运行。 模拟温度传感器的缺点 精度较低:模拟温度传感器的精度通常低于数字温度传感器芯片。它们可能受到多种因素的影响,如温度漂移、非线性误差和噪声等,从而导致测量精度下降。 易受干扰:模拟信号在传输过程中容易受到电磁干扰和噪声的影响,导致测量结果不准确。这需要采取额外的措施来降低干扰和噪声的影响。 处理复杂:模拟温度传感器输出的信号通常需要经过放大、滤波和模数转换等复杂处理过程才能被数字系统使用。这增加了系统的复杂性和成本。 数字式温度传感器芯片分类: 单总线接口 单总线(1-wire)是美国DALLAS公司推出的外围串行扩展总线技术。与SPI、I²C串行数据通信方式不同,它采用单根信号线传输。 这种协议由一个总线主节点、或多个从节点组成系统,通过根信号线对从芯片进行数据的读取。每一个符合单总线协议的从芯片都有一个唯一的地址,包括48位的序列号、8位的家族代码和8位的CRC代码。主芯片根据64位寻址对各个芯片进行双向通信,因此其协议对时序的要求较严格,初始化、写bit或读bit都有严格的时序要求,但是位于位之间没有严格要求。 单总线的数据传输速率一般为16.3Kbit/s,最大可达142 Kbit/s,通常情况下采用100Kbit/s以下的速率传输数据。主设备I/O口可直接驱动200m范围内的从设备,经过扩展后可达1km范围。 这种传输方式信号线上既传输时钟又传输数据,而且数据传输是双向的,具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点。 单总线只有一根数据线,设备(主机或从机)通过一个漏极开路或三态端口,连接至该数据线,这样允许设备在不发送数据时释放数据总线,以便总线被其它设各所使用。单总线端口为漏极开路,其内部等效电路下图所示: 单总线电路外接一个约5K的上拉电阻,当单总线处于空闲状态时为高电平,如果总线保持低电平超过480us,总线上的所有器件将复位。另外,在寄生方式供电时,为了保证单总线器件在某些工作状态下(如温度转换期间、EEPROM写入等)具有足够的电源电流,必须在总线上提供强上拉。 单总线温度传感器主要有数字温度传感器(如DS18B20)、DHT11等。 SPI总线接口 SPI 是一种四线制串行总线接口,为主/从结构,四条导线分别为串行时钟(SCLK)、主出从入(MOSI、主入从出(MISO)和从选(SS)信号。主器件为时钟提供者,可发起读从器件或写从器件操作。这时主器件将与一个从器件进行对话。当总线上存在多个从器件时,要发起一次传输,主器件将把该从器件选择线拉低,然后分别通过MOSI 和MISO 线启动数据发送或接收。 SPI 时钟速度很快,范围可从几兆赫兹到几十兆赫兹,且没有系统开销。SPI 在系统管理方面的缺点是缺乏流控机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道从器件是否繁忙。 因此必须设计聪明的软件机制来处理确认问题。同时SPI 也没有多主器件协议,必须采用很复杂的软件和外部逻辑来实现多主器件架构。每个从器件需要一个单独的从选择信号。总信号数最终为n+3 个,其中n是总线上从器件的数量。因此,导线的数量将随增加的从器件的数量按比例增长。同样,在SPI 总线上添加新的从器件也不方便。对于额外添加的每个从器件,都需要一条新的从器件选择线或解码逻辑。 IIC总线接口 I2C 是一种二线制串行总线接口,工作在主/从模式。二线通信信号分别为开漏SCL 和SDA 串行时钟和串行数据。主器件为时钟源。数据传输是双向的,其方向取决于读/写位的状态。每个从器件拥有一个唯一的7 或10 位地址。主器件通过一个起始位发起一次传输,通过一个停止位终止一次传输。起始位之后为唯一的从器件地址,再后为读/写位。 I2C总线速度为从0Hz到3.4MHz。它没有SPI 那样快,但对于系统管理器件如温度传感器来说则非常理想。 I2C 存在系统开销,这些开销包括起始位/停止位、确认位和从地址位,但它因此拥有流控机制主器件在完成接收来自从器件的数据时总是发送一个确认位,除非其准备终止传输。从器件在其接收到来自主器件的命令或数据时总是发送一个确认位。当从器件未准备好时,它可以保持或延展时钟,直到其再次准备好响应。 I2C允许多个主器件工作在同一总线上。多个主器件可以轻松同步其时钟,因此所有主器件均采用同一时钟进行传输。多个主器件可以通过数据仲裁检测哪一个主器件正在使用总线,从而避免数据破坏。 由于I2C总线只有两条导线,因此新从器件只需接入总线即可,而无需附加逻辑。 SMBus总线接口 SMBus是一种二线制串行总线,1996年第一版规范开始商用。它大部分基于I2C总线规范。和I2C样,SMBus不需增加额外引脚,创建该总线主要是为了增加新的功能特性,但只工作在100kHz且专门面向智能电池管理应用。它工作在主/从模式:主器件提供时钟,在其发起一次传输时提供一个起始位,在其终止一次传输时提供一个停止位;从器件拥有一个唯一的7或10位从器件地址。 SMBus与I2C总线之间在时序特性上存在一些差别。首先,SMBus需要一定数据保持时间,而I2C总线则是从内部延长数据保持时间。SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。 SMBus只工作在从10kHz到最高100kHz。最低工作频率10kHz是由SMBus超时功能决定的。 单线脉冲总线接口 单线脉冲输出数字温度传感器支持计数式通信,仅需单根信号线即可同时完成芯片供电和通信输出功能,有效降低MCU开销和成本。 中科银河芯自主研发设计的产品GX0011可直接替代NTC热敏电阻,无需任何外部感温单元即可实现12位(0.0625℃)温度输出, 在-50°C~ +150°C的正常工作范围内,测温精度误差< ±1℃,并具有良好的温度线性度曲线,适用于通信、计算机、消费电子、环境、工业和仪器仪表等应用场景。 GX0011 支持两种连接方式:上拉连接和下拉连接。需要注意的是,当采用下拉连接时,脉冲将从 GND 引脚(即拉电阻侧)输出,且总线极性与上拉连接方式相反,上电时 GND 引脚为低电平,温度转换完成后 GND 引脚周期发送高脉冲(占空比 25%)。 在单点应用中,上位机 MCU 仅需要一个 GPIO 口来对脉冲次数进行计数,可以有效节省 GPIO 资源。 单点应用参考电路如下: 在多点应用中,所有 GX0011 共享 GPIO0 作为脉冲计数端口,并且共用同一上下拉电阻。通过将 GPIO1 到GPIOn 中的一个拉低(下拉连接则为拉高)可以使能相应的 GX0011 测温节点。其余不用节点必须设置为高阻(或 两脚短接)状态。注意:如果两个及以上节点同时使能,相互之间会产生数据冲突。 上图所示,如果MCU接多个测温终端,需要占用过多IO资源,为解决上述问题,申矽凌(Sensylink)凭借其在热管理这一细分领域的技术积累,推出了总线式脉冲计数接口数字温度传感器芯片产品CT1721。支持在一个I/O PIN上,允许最多并联9颗产品,通过脉冲计数接口,同时监控九个区域的温度数据。用户通过2个PIN(AD0, AD1)设置不同的地址码(每个PIN通过接GND,DIO以及悬空,定义为3种状态),达到在总线上区分的目的。工作电压范围:1.4V - 5.5V,满足绝大多数系统温度测量/监控场景。 数字式温度传感器芯片选型: 测量范围和精度 测量范围:首先确定所需测量的温度范围,并选择能够覆盖该范围的传感器。例如,对于极低温度或极高温度的应用,需要选择具有相应测量范围的特殊传感器。 精度:根据应用对温度测量的精确度要求选择合适的传感器。精度表示传感器读数和系统实际温度之间的误差,通常针对不同温度范围有数个最高精度指标。 输出信号类型 数字温度传感器有多种输出信号类型,包括模拟信号、数字信号、总线信号(如I2C、SPI)等。根据控制系统或显示设备的需求选择合适的输出信号类型。 测量方式 接触式:传感器需要与被测物体接触,适用于需要精确测量物体表面或内部温度的场景。 非接触式(如红外线传感器):通过测量物体表面发射的红外线辐射能量来测量温度,适用于不接触物体、远距离测量的场景。 响应速度 根据实际应用场景的响应时间要求进行选择。对于需要快速响应的应用,如汽车电子领域,应选择响应速度更快的数字温度传感器。 抗干扰性能 在一些复杂环境下,数字温度传感器需要具备一定的抗干扰性能,以应对电磁干扰、振动干扰等。 成本和体积 成本:在满足性能要求的前提下,考虑传感器的成本和性价比。对于成本敏感的应用场景,可以选择价格较为低廉的数字温度传感器。 体积:对于空间有限的应用场景,选择体积更小的数字温度传感器更为合适。 其他因素 防护等级和防爆等级:根据实际工作环境选择合适的防护等级和防爆等级。 品牌和售后服务:选择知名品牌和有良好售后服务的数字温度传感器,以保证产品质量和售后服务支持。 校准和标定:考虑是否需要校准或标定传感器以获得更准确的测量结果。一些传感器在出厂时已经过校准,而其他传感器则可能需要在使用前进行校准。 数字式温度传感器芯片的厂商 1、霍尼韦尔(Honeywell) 公司简介:霍尼韦尔国际公司是一家在技术和制造业方面占世界领先地位的多元化跨国公司。其业务涉及多个领域,包括航空航天、住宅及楼宇控制、工业控制技术等。霍尼韦尔在传感器技术方面有着深厚的积累,其数字温度传感器在全球市场上享有很高的声誉。 应用领域:霍尼韦尔的数字温度传感器被广泛应用于工业自动化、航空航天、医疗设备等多个领域。 2、西门子(Siemens) 公司简介:西门子是全球电子电气工程领域的领先企业,自1872年进入中国以来,以创新的技术和卓越的解决方案支持中国的发展。西门子在传感器领域有着丰富的产品线,包括多种类型的温度传感器。 应用领域:西门子的数字温度传感器在工业自动化、能源、交通等领域得到广泛应用。 3、德州仪器(Texas Instruments, TI) 公司简介:德州仪器是一家全球知名的半导体公司,主要从事设计制造、测试销售模拟以及嵌入芯片处理服务。其在数字温度传感器领域拥有强大的技术实力和丰富的产品线。 应用领域:TI的数字温度传感器被广泛应用于消费电子、汽车电子、工业控制等多个领域。 4、意法半导体(STMicroelectronics, ST) 公司简介:意法半导体是全球规模较大的微电子产品生产企业,其产品涵盖高性能控制器、安全型智能卡芯片等多个领域。意法半导体在温度传感器领域也有着丰富的产品线和广泛的应用。 应用领域:意法半导体的数字温度传感器在汽车电子、工业控制、智能家居等领域得到广泛应用。 5、其他厂商 除了以上几家知名厂商外,还有许多其他优秀的数字温度传感器厂商,如Amphenol、Sensata、TDK、华工科技、正泰新能源等。这些厂商在各自的领域内都具有一定的技术实力和市场份额,为数字温度传感器行业的发展做出了重要贡献。 供应商A:北京智芯微电子科技有限公司 1、产品能力 (1)选型手册 (2)主推型号1: SCCK33112H6A 对应的产品详情介绍 SCCK33112H6A是一款高精度、低功耗、可替代NTC/PTC热敏电阻的数字温度传感器,可用于通信、计算机、消费类电子、环境、工业和仪器仪表应用中的温度测量。SCCK33112H6A在-40°C至+125°C的正常工作范围内,可提供≤±0.5℃的温度精度,并具有良好的温度线性度。SCCK33112H6A可提供扩展测温模式,将测温范围扩展为-55℃至+150℃。SCCK33112H6A的额定工作电压范围为1.4V~5.5V,在整个工作范围内最大静态电流为10µA(测温频率4Hz时)。集成在芯片内部的12位ADC分辨率低至0.0625°C。 SCCK33112H6A采用1.6mm×1.6mm的SOT563 /DFNWB封装,兼容SMBus和I2C接口,在一条总线上最多可挂载四个从机,并具有SMBus报警功能。 基 本 性 能 •测温范围:-55°C ~ +150°C •测温精度:±0.5°C(-40°C ~ +125°C) •封装:6-Pin SOT563(1.60 mm × 1.60 mm) 6-Pin DFNWB(1.60 mm × 1.60 mm) •电源电压:1.4V ~ 5.5V •低静态电流 正常工作:≤10μA(4Hz) 关断模式:≤1μA •分辨率:0.0625°C •数字输出:兼容SMBus™、I2C接口 应 用 场 景 •便携式、电池供电应用 •电源温度监控 •电脑外部设备热保护 •笔记本电脑 •电池管理 •办公机器 •恒温控制 •机电设备温度 •一般温度测量: – 工业控制 – 测验设备 – 医疗仪器 硬件参考设计 研发设计注意使用事项 在 SCCK33112H6A 的 V+引脚上添加一个 RC 滤波器可以进一步降低外部噪声的影响,如下图所示,其中的 RF 必须小于 5kΩ,CF 必须大于 10nF。 实际测温中,需将 SCCK33112H6A 放置在被监控的热源附近,并采用适当的布局以实现良好的热 耦合,确保在最短的时间间隔内捕获温度变化。为了在需要测量空气或表面温度的应用中保持精度,请注 意将封装和引线与环境温度隔离。导热粘合剂有助于实现精确的表面温度测量。 核心料(哪些项目在用) 奇迹物测温终端项目 2、支撑 (1)技术产品 技术资料 SCCK33112H6A数据手册.pdf 供应商B:Sensirion 1、产品能力 (1)选型手册 (2)主推型号1: SHT20 对应的产品详情介绍 SHT20,新一代Sensirion湿度和温度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚DFN封装,底面3 x 3mm ,高度1.1mm 传感器输出经过标定的数字信号,标准 I2C 格式。SHT20配有一个全新设计的CMOSens®芯片、一个经过改进的电容式湿度传感元件和一个标准的能隙温度传感元件,其性能已经大大提升甚至超出了前一代传感器(SHT1x和SHT7x)的可靠性水平。例如,新一代湿度传感器,已经经过改进使其在高湿环境下的性能更稳定。每一个传感器都经过校准和测试。在产品表面印有产品批号,同时在芯片内存储了电子识别码-可以通过输入命令读出这些识别码。 此外,SHT20的分辨率可以通过输入命令进行改变(8/12bit乃至12/14bit的RH/T),传感器可以检测到电池低电量状态,并且输出校验和,有助于提高通信的可靠性。由于对传感器做了改良和微型化改进,因此它的性价比更高-并且最终所有设备都将得益于尖端的节能运行模式。可以使用一个新的测试包EK-H4对SHT20进行测试 2、支撑 (1)技术产品 技术资料 SHT20 中文技术手册.pdf 供应商C:深圳市华普微电子股份有限公司 1、产品能力 (1)选型手册 (2)主推型号1: T09 对应的产品详情介绍 高温精度和超低功耗(低运行和静态电流)使得T09非常适合移动/电池供电应用。 T09是一个易于集成和使用的解决方案,具有工厂校准的传感器,集成线性化,可以在一条总线上可以使用8个不同I²C地址此外,T09温度传感器系统具有报警功能,可触发中断以保护设备免受过高温度的影响。 硬件参考设计 2、支撑 (1)技术产品 技术资料 T09Datasheet-V1.0.pdf 供应商D:郑州炜盛电子科技有限公司 1、产品能力 (1)选型手册 (2)主推型号1: WHT 20 对应的产品详情介绍 WHT 20 温湿度传感器嵌入了适于回流焊的双列扁平无引脚 SMD 封装,温度和湿度信号 可以在不同的引脚读出,底面 3.0×3.0 mm,高度 1.0 mm。传感器输出经过标定的数字信号, 标准I2C格式。 WHT 20 配有一个 ASIC 芯片、一个 MEMS 电容式湿度传感元件和一个温度传感元件。 WHT 20 温湿度传感器都经过校准和测试,具有优秀的可靠性和长期稳定性。 硬件参考设计 2、支撑 (1)技术产品 技术资料 3d04f55ead30e754e5ceb7cf1ee88745f94b44fe.pdf (如有侵权,联系删除)
  • 热度 2
    2023-10-5 07:20
    881 次阅读|
    0 个评论
    IIC 12864热插拔后不显示的原因可能有以下几种: 硬件问题:可能是接线有问题,需要检查硬件PDF文档以确定接线是否正确。此外,如果是51单片机,用P0口时需要加上10K的上拉电阻。还需要检查第三脚VO的连接方式是否正确,这个引脚是对比度电位引脚。对于不同的液晶屏,这个脚的接法可能有所不同。最后,还需要检查串并行选择是否正确,如果有PSB引脚,那么屏应该可以支持串并行,模式选择错误可能会导致不显示。 程序问题:可能是程序没有正确写入或者程序有错误,需要检查程序是否正确。 电源问题:可能是电源不稳定或者电压过高/过低,需要检查电源是否稳定,以及电压是否在规定的范围内。 其他问题:可能是液晶屏幕本身有问题,或者是受到了外界干扰(如电磁干扰),需要检查液晶屏幕本身是否有问题,以及是否有外界干扰。 需要注意的是,热插拔可能会导致硬件或者程序的损坏,建议在进行热插拔之前先关闭电源,然后再进行操作。如果以上方法都不能解决问题,建议寻求专业人士的帮助。
相关资源