适合超多氛围灯节点应用的新选择

文章目录

    • 1.前言
    • 2.芯片简介
      • 2.1 高动态RGB照明
      • 2.2 灵活的通信模式
      • 2.3 精确的颜色控制
      • 2.4 高性能与可靠性
      • 2.5 易于集成与控制
    • 3.硬件介绍
      • 3.1 方案框图
      • 3.2 通信模式
      • 3.3 器件选型
    • 4.基础操作
      • 4.1 基础操作示例
      • 4.2 状态机
      • 4.3 启动行为
      • 4.4 诊断
    • 5 颜色控制和温度稳定化
      • 5.1 颜色控制
      • 5.2 温度稳定化
    • 6 OSP(开放系统协议)介绍
      • 6.1 消息编码
      • 6.2 消息帧格式
      • 6.3 消息处理
      • 6.4 Cyclic redundancy check(循环冗余校验)
      • 6.5 命令(Commands)
    • 7. OTP to PWM 示例
    • 8. 示例代码
    • 9.评估套件
    • 10.参考资料

1.前言

23年底ams-OSRAM发布了新的氛围灯芯片E3731i,当时笔者有机会参加了现场培训。现在产品的相关资料也在官网发布,笔者基于官网资料以及培训时了解的信息,简单介绍下这款芯片。

2.芯片简介

E3731i将LED、LED驱动合封在一起,减少了客户硬件设计工作量,省去了客户产线LED的分bin工作。相比传统的ISELED方案,通信协议是开放的,不会限制主机的MCU型号。

E3731i的主要特色如下所述。

2.1 高动态RGB照明

  • 集成IC与LED:除了红、绿、蓝三种LED外,还集成了ams-OSRAM的IC。该嵌入式IC不仅集成了三个RGB LED的驱动程序,还包括了RGB LED的光学测量数据,为精确的颜色控制提供了基础。

  • 开放系统协议(OSP):支持通过OSP在菊花链拓扑结构中寻址和控制每个LED。这种开放协议允许外部微控制器读取光学测量数据,并运行任何颜色算法,还能读取温度值以优化颜色算法。

2.2 灵活的通信模式

  • 多种通信模式:支持LVDS模式(用于E3731i之间的通信)、MCU模式(简化与标准MCU的通信)、EOL模式(标识菊花链中的最后一个单元)和CAN模式(通过CAN-FD收发器让多个PCB的跨板通信变得稳定可靠)。

  • 灵活的通信架构:既支持单向通信,也支持双向半双工和单向回环模式,能够满足不同的系统架构需求。

2.3 精确的颜色控制

  • 光学测量数据:在10mA和50mA两个设定点提供光学测量数据,使微控制器能够进行PWM计算或校准,以实现非常精确的颜色设定点。

  • 温度补偿功能:内置温度传感器,能够在睡眠或激活设备状态下读取温度值,通过温度补偿优化颜色算法,确保在不同温度条件下颜色的一致性和准确性。

2.4 高性能与可靠性

  • 高亮度与稳定性:在典型发光角度120°(朗伯发射体)下,红、绿、蓝三种颜色的LED在10mA和50mA电流下均具有较高的亮度,且亮度在-40°C至125°C的结温范围内保持稳定。

  • 抗腐蚀与ESD保护:具有2B级抗腐蚀性,符合AEC-Q102-003认证,ESD保护等级如下,确保在汽车环境中的可靠性和耐用性。

    • HBM 2kV(ANSI/ESDA/JEDEC JS-001,Class 2)
    • CDM 500V(JESD22-C101,Class C2),

2.5 易于集成与控制

  • 自动寻址功能:在菊花链中能够自动为每个封装分配地址,简化了系统集成和控制过程。

  • 兼容性与扩展性:兼容多种微控制器和CAN-FD收发器,支持通过单端曼彻斯特编码通信连接到MCU,或通过LVDS进行设备间通信,方便系统扩展和与其他组件集成。

3.硬件介绍

3.1 方案框图

如果控制的LED不多,一个PCB就能满足,如下方案框图比较常见。

单PCB双向菊花链通信方案

E3731i可以借助CAN FD收发器进行跨板通信,如下是两种带CAN FD收发器的双向菊花链通信的方案框图,前者在控制板也放了一个E3731i,后者的控制板没有放E3731,需要MCU在接收模式下曼彻斯特信号进行解码。

双向菊花链通信方案框图1

双向菊花链通信方案框图2

除了双向菊花链通信,E3731i还支持回环菊花链通信,常见的两种方案框图如下:

回环菊花链通信方案框图-单个PCB

回环菊花链通信方案框图-多个PCB

3.2 通信模式

应用框图

E3731i的应用框图如上所示,两对SIO接口都支持四种通信模式,如下图所示,E3731i在上电复位或者收到RESET命令时,通过检测SIO接口的电平状态判断使用哪种模式。

通信模式选择

3.2.1 MCU mode

  • 当SIO_P接上拉电阻,SIO_N接下拉电阻时,E3731i复位之后处于MCU模式。MCU mode用于MCU和E3731i之间的通信。

  • 当MCU和E3731i使用双向通信时,MCU可以使用单SPI接口,也可以使用双SPI接口(一主一从),如下图所示。只是使用单SPI接口时,对MCU性能要求比较高,需要能够快速将SPI从主机模式切换到从机模式。

单SPI接口

双SPI接口

  • 当MCU和E3731i使用回环模式时,建议MCU使用两个SPI外设。第一个节点和MCU的主SPI连接,最后一个节点需要和MCU的从SPI相连,连接示意图如下所示。

回环模式

注意:

  • 理想情况下,当MCU从E3731i接收数据时,SDO接口应该拉低或者高阻态。
  • 有些MCU的SPI外设在从机模式下需要拉低CS才能接收数据,针对这种情况,建议使用GPIO口去控制CS,不使用受SPI外设控制的CS。

3.2.2 CAN mode

  • 当SIO_P和SIO_N都接上拉电阻时,E3731i复位之后处于MCU模式。MCU模式用于MCU和E3731i或者E3731i之间的跨板通信。

  • E3731i和CAN FD收发器的连接示意图如下,SIO_N和RX连接,用于接收数据;SIO_P和TX连接,用于传输数据。

E3731i通过CAN FD收发器

  • E3731i不支持CAN FD协议,所以CAN FD收发器在这个应用中只能做点对点通信。

  • 选择的CAN FD收发器需要支持5M bps通信速率。

数据通信速率

3.2.3 LVDS mode

  • 当SIO_P和SIO_N都接下拉电阻(内部有100K下拉电阻,也可以不接)时,E3731i复位之后处于LVDS模式。LVDS mode用于E3731之间的直连通信。

  • 当两个E3731i通过LVDS模式连接时,两者之间的连线阻抗建议在200Ω左右。

3.2.4 EOL mode

  • 当SIO_P接下拉电阻,SIO_N接上拉电阻时,E3731i复位之后处于EOL(end of line)模式。EOL模式用于标识菊花链中的最后一个E371i。

3.3 器件选型

3.3.1 供电器件

  • 单颗E3731i的供电为5V,最大工作电流为170mA。实际应用时需要根据设备状态、电流模式、亮度和颜色设置选择合适的DCDC或者LDO。详细信息如下数据手册的参数。

工作参数

内部LED驱动参数

3.3.2 被动元件

  • 滤波电容:建议将滤波电容尽可能靠近VDD引脚放置,以减少电源噪声对设备性能的影响。

  • 上拉/下拉电阻:用于通信模式选择。推荐值为2.2kΩ至25kΩ,具体取决于通信模式。如果使用3.3V逻辑电平的组件,可以使用高达60kΩ的电阻。

  • MOSI解耦电阻:可选,用于减少信号反射和干扰,推荐值为2.2kΩ。

配合3.2章节的应用框图,几个电阻电容的参数总结如下表。

被动元器件参数

3.3.3 MCU

以下是一些推荐的微控制器型号:

  • NXP的S32K144
  • ST的STM32F446
  • Microchip的ATSAMC21J18A
  • Infineon PSoCTM4

3.3.4 CAN FD收发器

E3731i支持所有标准的CAN FD收发器,需要CANH、CANL引脚为5V电平标准,TXD、RXD引脚支持3.3V或5V电平。以下是一些推荐的收发器型号:

  • TJA1057GT/3
  • TJA1442
  • TLE9251V_AEC

4.基础操作

这一章节主要针对E3731i的基础操作进行介绍。

4.1 基础操作示例

如下是基础操作序列的示例,用于在由100个LED组成的菊花链上设置静态或动态的温度控制颜色(渐变)。操作分为三个阶段:设置阶段、主循环和关机阶段。

4.1.1 设置阶段

  1. 连接电源后,等待约1毫秒,直到设备准备好。

  2. 通过广播发送设置配置命令,例如启用CRC校验、设置SPI时钟极性等。

  3. 发送INIT命令(双向或回环模式),并等待最后一个单元的响应。

  4. 对每个单元进行配置:

    • 读取状态并检查错误。
    • 发送基本配置(诊断选项、PWM频率等)。
    • 读取校准数据并存储在MCU中(仅在组装后执行一次)。
    • 读取温度并存储在MCU中。
    • 切换到ACTIVE模式。

4.2.2 主循环(每次从BCU接收到新输入执行)

  1. 从车身控制单元(BCU)获取每个单元的目标颜色。

  2. 根据存储的数据,为每个单元计算新的PWM设置。

  3. 更新每个单元的PWM设置。

4.2.3 稳定化循环(持续执行)

  1. 从一个单元读取状态和温度。

  2. 检查是否有错误发生。

  3. 根据新的温度,为该单元计算新的PWM设置。

  4. 更新该单元的PWM设置。

  5. 继续下一个单元:重复上述步骤,直到所有单元都处理完毕。

4.2.4 关机阶段

  1. 发送GO_SLEEP命令,将设备切换到SLEEP模式。

  2. 断开设备的电源连接。

4.2 状态机

状态机

E3731i的状态机如上图,各个状态介绍如下:

  • POR:芯片处于off状态

  • UNINITIALIZED:芯片上电后自动进入该状态,PWM值为0以及LED驱动disabled。在这个状态下,芯片只能响应如下几个命令:

    • INIT (双向模式或者回环模式)
    • RESET(广播)
    • CLRERROR(广播)
    • SETOTTH(广播)
    • SETSETUP(广播)
    • SETPWM(广播)

其它命令会被忽略。广播消息会快速向前转发,而带地址的消息需要接收节点完全收到后才会向前转发。

  • SLEEP:E3731i收到INIT命令、GO_SLEEP命令、FAULT事件等(详细看状态机图),会进入该状态。该状态下LED驱动disabled但是最后一个PWM参数会被保存,不会重置为0,所以该状态下可以更新PWM参数。

  • ACTIVE:E3731i在收到GO_ACTIVE命令并且当前没有错误的情况下会进入该状态。该状态下,LED驱动会按照每个通道的电流、PWM频率、占空比配置去使能,并且后续可以更新PWM参数。进入该状态后,通道的开短路检测也会打开。

  • DEEPSLEEP:E3731i在收到GO_DEEPSLEEP命令会进入该状态。该状态下功耗和SLEEP接近。后续在新的IC产品上功耗会做的更低。

两种低功耗模式的工作电流

4.3 启动行为

E3731i启动行为

当E3731i供电正常,或者收到RESET命令,会在上图的PoR段执行以下的启动序列。

  1. 寄存器恢复到默认值。

  2. 加载存储在非易失性存储器中的校准设置,并检查其完整性。如果检测到校准设置与内部CRC(循环冗余校验)不匹配,STATUS寄存器中的OTPCRC标志会被设置。

  3. 设备会检查每个SIOx引脚的电压电平,以确定通信模式。在检测通信模式时,SIOx_P和SIOx_N引脚会被短接约40微秒,以便设备能够正确检测引脚的电平状态。

  4. E3731i进入UNINITIALIZED状态,并准备好接收第一个命令。

整个启动序列大概需要1ms。

注意:如果SPI接口已经启用,SIOx引脚的短接操作可能会被MCU误认为时钟边沿。因此设计MCU的程序需要避开该情况。

4.4 诊断

4.4.1 故障标志位

E3731i提供了多种内置诊断功能,用于自动检测故障条件。如果检测到故障,相应的故障标志位会被设置。这些标志位可以通过以下几种方式清除:

  • 通过MCU读取STATUS寄存器(直接或通过状态请求位)。
  • 使用CLRERROR命令清除所有标志位。
  • 接收到RESET命令后清除。

4.4.2 故障处理

如果选用了相应的故障处理选项,E3731i会在检测到故障时自动关闭LED驱动器,并切换到SLEEP模式,以防止设备损坏。这确保了即使某个设备出现故障,整个链式通信仍然可以正常进行。

4.4.3 故障类型

E3731i支持以下几种故障检测:

  • Overtemperature(过温故障):

    • 当IC结温超过过温阈值时,会触发此故障。该故障标志位只能在温度下降到过温释放阈值以下时清除。

    • 用户可以通过SETSETUP命令控制过温阈值的具体值。

  • Undervoltage(欠压故障)

    • 当设备的供电电压低于欠压阈值,并且持续时间超过去抖时间时,会触发此故障。

VDD参数

  • Driver open / short(LED驱动开路/短路故障)

    • 当LED驱动引脚的电压持续高于LED开路阈值电压或低于LED短路阈值电压,并且持续时间超过去抖时间时,会触发此故障。

    • 这些故障条件会针对每个通道分别检测,但在设备进入ACTIVE模式后,只有当通道的PWM值大于最小值时,才会进行开路/短路检测。

    • 在ACTIVE模式下,如果某个通道的PWM值低于最小值,然后又重新设置为大于最小值,会重新进行开路/短路检测。

注意:建议在设置中启用开路/短路故障标志位,以便在检测到故障时将设备切换到SLEEP模式。

  • Communication errors(通信错误):参考下文介绍OSP协议的章节。

5 颜色控制和温度稳定化

E3731i为每个LED提供了日间和夜间电流设置下的内置校准数据,以及IC内部的内置温度传感器。这些功能共同实现了在整个色域和工作温度范围内的高精度颜色控制。

5.1 颜色控制

5.1.1 校准数据

E3731i为每个LED提供了内置的校准数据,这些数据以(u’, v’, Iv)三元组的形式存储在非易失性存储器中。

当MCU加载了编码值XIv, Xu’, Xv’之后,就可以使用下图中的计算公式和电流模式参数来计算物理颜色坐标。

电流模式参数

5.1.2 PWM计算

任何RGB三元组可及色域内的颜色,都可以通过三个LED各自的光谱线性组合来实现。可以通过改变LED的有效占空比(PWM),方便地调整单个LED的亮度。

为了实现目标三刺激值(XT, YT, ZT)的颜色混合,PWM占空比可以通过以下步骤计算得出:

  1. 根据Cx/Cy或u’/v’颜色目标创建目标三刺激向量:

  1. 根据电流模式参数使用正确的校准数据计算RGB三元组的三刺激矩阵:

  1. 求解线性方程$\ Ax = T$,得到解向量 $\ x = (D_r, D_g, D_b)^T$,即每个LED所需的占空比(范围为0到1):

其中,A1,A2,A3是通过将矩阵A的第1、2或3列替换为目标向量后得到的3x3矩阵。3x3矩阵的行列式一般计算公式为:

最后,为了使用SETPWM命令,需要将这些占空比乘以所选PWM频率下的最大PWM值:2
^15−1=32767。

注意:对于1kHz PWM频率模式,应使用相同的PWM设置,因为内部会自动将其调整为14位分辨率。

5.2 温度稳定化

3731i内置的温度传感器使得设备能够在整个色域和工作温度范围内实现高精度的色彩控制。以下是实现温度稳定化的两种方法。

基础的温度稳定化方法如下图,其中黄色部分已在E3731i内部实现,蓝色部分需要客户端实现。

基础的稳定稳定化方法

5.2.1 Temperature sensor(温度传感器)

E3731i内置了一个8位分辨率的温度传感器,能够提供准确稳定的温度读数。温度传感器的返回值(ADC)可以通过以下公式转换为芯片温度(°C):

温度计算公式

注意:

  • 校准温度对应的ADC值为140,因此温度补偿公式中的温度值以ADC计数表示。
  • 读取温度:温度传感器可以在SLEEP模式和ACTIVE模式下读取。

5.2.2 Temperature prediction(温度预测)

返回的温度读数对应于IC的结温。在初步近似中,此值可用作LED温度的替代值,适用于温度补偿功能(同样适用于ADC计数):

如果想实现更精确的色彩稳定化,需要使用LED的结温,因为它们可能因电流模式和选定的颜色点而与IC温度相差几摄氏度。

5.2.3 简单温度补偿 - I

通过仅补偿红色LED的亮度损失,可以实现良好的温度稳定化,可以使用简单的线性因子(这些值仍处于早期状态,可能会发生变化):

或者使用查表:

其中, A ( I F , T ) A(I_F, T) A(IF,T) 可以从下表中查询得到:

温度补偿参数

5.2.4 简单温度补偿 - II

通过使用如下两张查找表,可以更好地补偿所有三个LED(红、绿、蓝)。这些表针对D65白点进行了优化。

温度补偿查找表-Nighttime mode

温度补偿查找表-Daytime mode

5.2.5 优化的温度补偿函数

LED校准参数的温度依赖性可以通过二次函数很好地描述:

温度补偿函数

其中:

  • f是u’、v’和Iv的占位符。
  • T是LED的结温。
  • T c a l T_{cal} Tcal是校准温度(ADC值 = 140)。
  • a和b是常数。

结合存储的校准数据 f ( T c a l ) f(T_{cal}) f(Tcal),可以计算出在任何温度下所需的PWM值的校准数据。下表中给出了常数的值。

温度补偿函数参数

示例:

在夜间模式下,温度为87.8°C(ADC = 198)时,红色LED的校正Iv为:

6 OSP(开放系统协议)介绍

E3731i的通信基于一种专用的主从串行总线协议,称为开放系统协议(OSP)。除了基础协议外,E3731i还实现了其他专用命令。

6.1 消息编码

曼彻斯特编码

E3731i使用了不同的编码方式,其中Manchester编码基于IEEE 802.3标准,逻辑“1”由上升沿表示,逻辑“0”由下降沿表示。

E3731i编码方式

在E3731i到MCU的单线通信中,时钟极性可以通过命令选择。默认设置使用上升沿。

示例波形

下面四张图为示例波形,其中内部信号仅供参考。内部时钟指示数据位的长度。结合3.1和3.2章节更方便理解。

MCU到E3731i的通信波形

MCU到E3731i的通信波形-时钟极性正常和反转

CAN FD收发器到E3731i的通信波形

E3731i到CAN FD收发器的通信波形

E3731i之间使用LVDS模式的通信波形

6.2 消息帧格式

OSP是一种基于消息的协议,其通用消息帧格式如图14所示。

通用消息帧格式

传输的顺序为MSB(高bit先传输),MCU和E3731i的双向传输格式都是一样的。帧格式说明如下:

  • 前导码(Preamble,4位):固定为0b1010。

注意:
避免使用前导码不正确的消息,因为这可能导致错误的消息沿着链路被转发,并且会引发CE_FLAG置位。

  • 地址(Address,10位):下行消息(MCU发送给E3731i的消息)允许的值为0x000(用于广播)和0x001到0x3ef(用于独立节点)。上行消息(E3731i发送给MCU的消息)始终包含发送方的地址。并非所有命令都允许在广播消息中使用,详见后续的命令章节。

  • PSI(3位):PSI字段指示有效载荷的长度(以字节为单位)。其值必须与每个命令的预期值匹配(可能因消息上下行方向而异)。

PSI允许的值

总消息长度为PSI + 4字节。

注意:

  • PSI值0b101不被允许,即使在未直接寻址的单元中,也会引发通信错误。
  • 如果PSI值大于有效载荷,可能会导致有效载荷被前面消息的垃圾数据填充。在这种情况下,不会引发CE_FLAG。
  • 命令(Command,7位):详见后续的命令章节。

  • 有效载荷(Payload,0到64位):可变有效载荷字段。长度必须与PSI字段中给出的值匹配。

  • CRC(8位):详见后续的CRC章节”。

6.3 消息处理

广播

  • 地址为0x000的消息会触发广播,即所有链上的节点都会接收并处理该消息。是否允许某个命令进行广播,详见后续的命令章节。

  • 触发响应和状态请求的命令不允许在广播消息中使用。如果在广播消息中仍然请求响应(READxx或SR),只有链上的最后一个单元(EOL)会发送响应消息。这种行为不建议使用。

转发和快速转发

  • 消息转发指的是不修改消息内容直接转发消息。

  • 如果消息地址为广播地址,或者与节点地址不同,则消息会被转发到下一个设备。

  • 如果需要转发消息,转发会在接收到前导码和地址字段后立即开始,即在接收到15位后开始。这被称为快速转发。

  • 当一个节点处于UNINITIALIZED状态时,广播消息会被快速转发,而针对特定地址的消息(0x001到0x3fe)只有在完整消息接收完成后才会被转发。

响应和状态请求

  • 某些命令会触发被寻址节点的响应。在这种情况下,地址字段包含发送节点的地址,以指示消息的来源。响应通常会在命令消息接收完成后约3-4个比特周期内发送。

  • 某些命令不发送响应,但允许状态请求。状态请求通过在命令字段中设置第5位(“SR”位)来完成:

uint8_t commandSR = command | (1 << 5);
  • 如果接收到有效的“SR”位,节点会在执行原始命令后,将TEMPSTAT寄存器发送给MCU。状态位在响应了状态请求后会清除。对于CLRERROR命令,状态位会在发送状态请求之前被清除。

  • 支持状态请求的命令详见后续的命令章节。

注意:

  • 如果在不支持状态请求的命令中设置了SR位,命令将被执行,但TEMPSTAT寄存器将被发送给MCU,而不是命令预期的响应。此规则不适用于INITxx命令。
  • OSP不允许在同一个节点上同时进行上下行消息传输,因为这可能导致消息丢失或损坏。因此,触发响应的命令和状态请求不允许在广播消息中使用。如果仍然请求响应(READxx或SR),只有链上的最后一个单元(EOL)会发送响应消息。这种行为不建议使用。

消息间等待时间

  • 在接收或传输消息时,E3731i不会接受新消息。同样,不支持同时进行上下行消息传输。因此,MCU需要在发送两条消息之间添加等待时间,以确保所有接收和传输活动都已完成。

  • 下行消息之间的最小等待时间应为8.5微秒,适用于仅写入和广播命令且不请求响应的情况。如果请求了响应,则应在MCU接收到响应后才发送下一条消息。

通信错误(Communication errors)

E3731i要求链中的每个单元都能检测到某些通信错误。下图总结了所有相关的错误条件。

通信错误条件

  • 如果检测到错误,OSIRE® E3731i会设置相应的故障标志位。如果消息需要转发,即使检测到错误,消息仍然会被转发,通信不会中断。

  • 如果错误是由于未知命令或PSI与命令不匹配引起的,只有在单元被直接寻址时才会检测到这些错误。

注意:
如果消息的PSI与有效载荷不匹配,并且消息不是直接寻址到单元的,该消息仍然会被转发,有效载荷的长度将根据PSI值进行调整,这可能导致有效载荷被截断或用未定义的数据填充。例如,两个设备之间的GND连接不良可能导致这种行为。

6.4 Cyclic redundancy check(循环冗余校验)

CRC字段包含对整个消息(不包括CRC字段本身)进行计算得出的CRC8校验字。

  • CRC实现: x 8 + x 5 + x 3 + x 2 + x + 1 x^8 + x^5 + x^3 + x^2 + x +1 x8+x5+x3+x2+x+1
  • 多项式表示:0x2F(常规表示)。
  • 初始值:0x00。
  • XOR值:0x00。
  • 方向:MSB优先。

注意:

  • 此实现使用和AUTOSAR相同的多项式,但由于初始值和XOR值为0xFF,因此与AUTOSAR实现不兼容。
  • 在非易失性存储器(OTP)中,CRC字段的计算方向为LSB优先。

6.5 命令(Commands)

E3731i支持以下命令。

E3731i Commands

如果E3731i接收到未在下表中列出的命令,并且PSI大于0,则会引发通信错误。如果PSI为零,则消息会被静默忽略。

6.5.1 RESET

  • 编码:0x00
  • 广播支持:是
  • 有效载荷大小:0字节
  • 响应有效载荷大小:0字节
  • 状态请求支持:否
  • 描述:执行完整的复位操作,效果与上电复位相同。所有寄存器值将恢复到默认值,所有错误标志将被清除,通信模式检测将重新启动,LED驱动器将关闭,地址将设置为0x3ff。设备进入UNINITIALIZED模式。发出REST命令之后,至少需要等待150us才能发送下一个命令。

6.5.2 CLRERROR

  • 编码:0x01
  • 广播支持:是
  • 有效载荷大小:0字节
  • 响应有效载荷大小:0字节
  • 状态请求支持:是
  • 描述:清除所有错误标志。如果错误条件仍然存在,错误标志将自动重新设置。如果设置了SR位,设备将在清除错误标志后返回TEMPSTAT寄存器。

6.5.3 INITBIDIR

  • 编码:0x02
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:2字节
  • 状态请求支持:否
  • 描述:启动自动寻址功能,并将通信方向设置为双向模式。该命令应始终发送到链中的第一个单元(地址为0x001)。链中的最后一个单元(由EOL模式指示)将返回其地址给主设备。后续命令应在接收到响应后发送。

自动寻址流程图

注意:

  • 如果节点地址达到0x3fe,会停止自动寻址流程并返回地址0x3fe给MCU。
  • 如果一个节点已经初始化了地址,自动寻址命令会被忽略,但会转发该命令(地址+1)给下一个节点,这个可以用来在复位之后有选择性的初始化某些节点。在这种应用中,建议不要使用非0x001的地址去初始化菊花链。
  • 如果菊花链中的最后一个设备不是EOL模式(例如,使用CAN-FD连接),则需要应用层确保菊花链的长度正确,并且主设备能够正确处理最后一个设备的响应。
  • 该命令不支持广播模式,如果使用广播地址0x000发送,所有节点会将CE_FLAG置位,并且最后一个节点会使用地址0x000返回寄存器TEMPSTAT的值。

6.5.4 INITLOOP

  • 编码:0x03
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:2字节
  • 状态请求支持:否
  • 描述:与INITBIDIR相同,但将通信模式设置为回环模式。响应将通过前向方向发送给主设备。

6.5.5 GOSLEEP

  • 编码:0x04
  • 广播支持:是
  • 有效载荷大小:0字节
  • 响应有效载荷大小:0字节
  • 状态请求支持:是
  • 描述:将E3731i设置为SLEEP状态。

6.5.6 GOACTIVE

  • 编码:0x05
  • 广播支持:是
  • 有效载荷大小:0字节
  • 响应有效载荷大小:0字节
  • 状态请求支持:是
  • 描述:将E3731i设置为ACTIVE状态。

6.5.7 GODEEPSLEEP

  • 编码:0x06
  • 广播支持:是
  • 有效载荷大小:0字节
  • 响应有效载荷大小:0字节
  • 状态请求支持:是
  • 描述:将E3731i设置为DEPPSLEEP状态。

6.5.8 IDENTIFY

  • 编码:0x07
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:4字节
  • 状态请求支持:否
  • 描述:返回32位节点类型识别码。

6.5.9 READSTATUS

  • 编码:0x40
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:1字节
  • 状态请求支持:否
  • 描述:返回状态寄存器(STATUS),如下图所示。

STATUS寄存器

6.5.10 READTEMPST

  • 编码:0x42
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:2字节
  • 状态请求支持:否
  • 描述:返回状态寄存器(STATUS)和温度寄存器(TEMP)。

6.5.11 READCOMST

  • 编码:0x44
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:1字节
  • 状态请求支持:否
  • 描述:返回通信状态寄存器(COM STATUS),如下图所示。

COM STATUS寄存器

6.5.12 READLEDST

  • 编码:0x46
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:1字节
  • 状态请求支持:否
  • 描述:返回LED状态寄存器(LED STATUS),如下图所示。

LED STATUS寄存器

6.5.13 READTEMP

  • 编码:0x48
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:1字节
  • 状态请求支持:否
  • 描述:返回温度寄存器(TEMP),如下图所示。

TEMP寄存器

6.5.14 READOTTH

  • 编码:0x4A
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:3字节
  • 状态请求支持:否
  • 描述:返回过温阈值寄存器(OTTH),如下图所示。

OTTH寄存器

6.5.15 SETOTTH

  • 编码:0x4B
  • 广播支持:是
  • 有效载荷大小:3字节
  • 响应有效载荷大小:0字节
  • 状态请求支持:是
  • 描述:写入过温阈值寄存器(OTTH),写入值之后至少需要一个温度传感器的更新周期才能生效。

6.5.16 READSETUP

  • 编码:0x4C
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:1字节
  • 状态请求支持:否
  • 描述:返回设置寄存器(SETUP),如下图所示。

SETUP寄存器

6.5.17 SETSETUP

  • 编码:0x4D
  • 广播支持:是
  • 有效载荷大小:1字节
  • 响应有效载荷大小:0字节
  • 状态请求支持:是
  • 描述:写入设置寄存器(SETUP),建议在INIT命令之前通过广播方式使能CRC校验。

6.5.18 READPWM

  • 编码:0x4E
  • 广播支持:否
  • 有效载荷大小:0字节
  • 响应有效载荷大小:6字节
  • 状态请求支持:否
  • 描述:返回PWM寄存器,如下图所示。

PWM寄存器

6.5.19 SETPWM

  • 编码:0x4F
  • 广播支持:是
  • 有效载荷大小:6字节
  • 响应有效载荷大小:0字节
  • 状态请求支持:是
  • 描述:写入PWM寄存器,写入值在节点收到命令之后就会生效。

6.5.20 READOTP

  • 编码:0x58
  • 广播支持:否
  • 有效载荷大小:1字节
  • 响应有效载荷大小:8字节
  • 状态请求支持:否
  • 描述:从地址OTPADDR读取OTP值。响应包含从OTPADDR开始的8个字节。如果任何字节超出有效地址范围,这些字节将包含随机数据,应被忽略。响应将在大约55微秒后发送。

OTP寄存器

OTP Memory map

7. OTP to PWM 示例

在E3731i的使用手册的5.3章节中,提供了一个示例:

  • 如何从OTP读取校准数据,并将其转换为PWM(脉冲宽度调制)值,以实现目标颜色。

这里篇幅有限就不进行介绍了,感兴趣的读者可以根据文末的连接下载查看。

8. 示例代码

在E3731i的使用手册的5.3章节中,提供如下三个关键功能的参考代码,感兴趣的读者可以自行下载查看。

  • 曼彻斯特编码的实现

  • 帧消息的CRC校验

  • OTP存储内容的CRC校验

9.评估套件

为了方便客户快速熟悉E3731i,ams-OSRAM提供一套E3731i评估板,可以搭配S32K144EVB进行评估,如下图所示。

E3731i评估板图片(来源于ams-OSRAM原厂培训资料)

除了评估板之外,ams-OSRAM还提供了配套评估板的S32DS工程以及上位机。S32DS工程实现的功能主要有:

  • OSP协议命令的底层驱动
  • 曼彻斯特编码实现
  • CRC计算实现
  • 用于达到目标颜色和亮度的PWM计算
  • 基于LED特性的第一次颜色校正/温度补偿
  • 三刺激值X,Y,Z / Cx,Cy / u’v’计算

关于评估套件的详细资料,可以找ams-OSRAM原厂进行申请。

10.参考资料

  • OSIRE® E3731i - Startup Guide
  • KRTBI D2LM31.31

如果觉得文章不错,帮忙给个一键三连!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10365.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB-Simulink并行仿真示例

一、概述 在进行simulink仿真的过程中常常遇到CPU利用率较低&#xff0c;仿真缓慢的情况&#xff0c;可以借助并行仿真改善这些问题&#xff0c;其核心思想是将参数扫描、蒙特卡洛分析或多工况验证等任务拆分成多个子任务&#xff0c;利用多核CPU或计算集群的并行计算能力&…

运算符重载(输出运算符<<) c++

我们来看下面这个Bug 报错1&#xff1a;打印整形&#xff08;int&#xff09;可以直接打印&#xff0c;打印字符&#xff08;char&#xff09;也可以直接打印&#xff0c;那是因为本身就已经给我们的内置类型准备好了一个输出运算符&#xff0c;可以直接用&#xff0c;但是我们…

【C++】类和对象(5)

目录 一、构造函数补充1、初始化列表 二、类型转换三、static成员四、友元1、友元函数2、友元类 五、内部类六、匿名对象 一、构造函数补充 对于之前讲解的构造函数&#xff0c;还有一些更深层次的内容要进行补充&#xff0c;接下来进行补充内容的讲解。 1、初始化列表 在我…

反向代理模块b

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

Python - Quantstats量化投资策略绩效统计包 - 详解

使用Quantstats包做量化投资绩效统计的时候因为Pandas、Quantstats版本不匹配踩了一些坑&#xff1b;另外&#xff0c;Quantstats中的绩效统计指标非常全面&#xff0c;因此详细记录一下BUG修复方法、使用说明以及部分指标的内涵示意。 一、Quantstats安装及版本匹配问题 可以…

C#,入门教程(13)——字符(char)及字符串(string)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(12)——数组及数组使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123918227 字符串的使用与操作是必需掌握得滚瓜烂熟的编程技能之一&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; C#语言实…

主流的AEB标准有哪些?

目录 1、AEB的技术构成与工作原理 2、典型应用场景举例 3、AEB的功能分类 4、AEB系统性能评估的关键因素 5、全球AEB技术标准概览 5.1、联合国欧洲经济委员会&#xff08;UN ECE&#xff09; 5.2、美国NHTSA法规 5.3、中国标准 5.4、印度AIS 185 5.5、澳大利亚ADR法规…

Linux网络 | 网络层IP报文解析、认识网段划分与IP地址

前言&#xff1a;本节内容为网络层。 主要讲解IP协议报文字段以及分离有效载荷。 另外&#xff0c; 本节也会带领友友认识一下IP地址的划分。 那么现在废话不多说&#xff0c; 开始我们的学习吧&#xff01;&#xff01; ps&#xff1a;本节正式进入网络层喽&#xff0c; 友友们…

基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)

一、引言 1.1 研究背景与意义 在临床用药过程中,药物相互作用(Drug - Drug Interaction, DDI)是一个不可忽视的重要问题。当患者同时服用两种或两种以上药物时,药物之间可能会发生相互作用,从而改变药物的疗效、增加不良反应的发生风险,甚至危及患者的生命安全。例如,…

TCL C++开发面试题及参考答案

进程和线程的区别 进程和线程都是操作系统中重要的概念,它们在很多方面存在着明显的区别。 从概念上来说,进程是资源分配的基本单位,每个进程都有自己独立的地址空间、内存、文件描述符等资源。例如,当我们在计算机上同时运行多个应用程序,像浏览器、文本编辑器等,每个应…

如何获取当前的位置信息

文章目录 1 概念介绍2 使用方法3 示例代码3 体验分享 我们在上一章回中介绍了如何实现滑动菜单相关的内容&#xff0c;本章回中将介绍如何获取位置信息.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的获取位置信息本质上是获取当前手机所在位置的…

python-leetcode-旋转链表

61. 旋转链表 - 力扣&#xff08;LeetCode&#xff09; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def rotateRight(self, head: Optional[ListN…

基于排队理论的物联网发布/订阅通信系统建模与优化

论文标题 英文标题&#xff1a;Queuing Theory-Based Modeling and Optimization of a Publish/Subscribe IoT Communication System 中文标题&#xff1a;基于排队理论的物联网发布/订阅通信系统建模与优化 作者信息 Franc Pouhela Anthony Kiggundu Hans D. Schotten …

[EAI-026] DeepSeek-VL2 技术报告解读

Paper Card 论文标题&#xff1a;DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding 论文作者&#xff1a;Zhiyu Wu, Xiaokang Chen, Zizheng Pan, Xingchao Liu, Wen Liu, Damai Dai, Huazuo Gao, Yiyang Ma, Chengyue Wu, Bin…

基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)

四、特征工程 4.1 分子描述符计算 分子描述符作为量化分子性质的关键数值,能够从多维度反映药物分子的结构和化学特征,在药物相互作用预测中起着举足轻重的作用。RDKit 库凭借其强大的功能,为我们提供了丰富的分子描述符计算方法,涵盖了多个重要方面的分子性质。 分子量…

【算法】动态规划专题① ——线性DP python

目录 引入简单实现稍加变形举一反三实战演练总结 引入 楼梯有个台阶&#xff0c;每次可以一步上1阶或2阶。一共有多少种不同的上楼方法&#xff1f; 怎么去思考&#xff1f; 假设就只有1个台阶&#xff0c;走法只有&#xff1a;1 只有2台阶&#xff1a; 11&#xff0c;2 只有3台…

0 基础学运维:解锁 K8s 云计算运维工程师成长密码

前言&#xff1a;作为一个过来人&#xff0c;我曾站在技术的门槛之外&#xff0c;连电脑运行内存和内存空间都傻傻分不清&#xff0c;完完全全的零基础。但如今&#xff0c;我已成长为一名资深的k8s云计算运维工程师。回顾这段历程&#xff0c;我深知踏上这条技术之路的艰辛与不…

事务03之MVCC机制

MVCC 多版本并发控制机制 文章目录 MVCC 多版本并发控制机制一&#xff1a;并发事务的场景1&#xff1a;读读场景2&#xff1a;写写场景3&#xff1a;读写 or 写读场景 二&#xff1a;MVCC机制综述1&#xff1a;MVCC日常生活的体现2&#xff1a;多版本并发控制 三&#xff1a;M…

数据结构-Stack和栈

1.栈 1.1什么是栈 栈是一种特殊的线性表&#xff0c;只允许在固定的一段进行插入和删除操作&#xff0c;进行插入和删除操作的一段称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵顼后进先出LIFO&#xff08;Last In First Out&#xff09;的原则&#xff0c;就像一…

langchain基础(二)

一、输出解析器&#xff08;Output Parser&#xff09; 作用&#xff1a;&#xff08;1&#xff09;让模型按照指定的格式输出&#xff1b; &#xff08;2&#xff09;解析模型输出&#xff0c;提取所需的信息 1、逗号分隔列表 CommaSeparatedListOutputParser&#xff1a;…