23年底ams-OSRAM发布了新的氛围灯芯片E3731i,当时笔者有机会参加了现场培训。现在产品的相关资料也在官网发布,笔者基于官网资料以及培训时了解的信息,简单介绍下这款芯片。
E3731i将LED、LED驱动合封在一起,减少了客户硬件设计工作量,省去了客户产线LED的分bin工作。相比传统的ISELED方案,通信协议是开放的,不会限制主机的MCU型号。
E3731i的主要特色如下所述。
集成IC与LED:除了红、绿、蓝三种LED外,还集成了ams-OSRAM的IC。该嵌入式IC不仅集成了三个RGB LED的驱动程序,还包括了RGB LED的光学测量数据,为精确的颜色控制提供了基础。
开放系统协议(OSP):支持通过OSP在菊花链拓扑结构中寻址和控制每个LED。这种开放协议允许外部微控制器读取光学测量数据,并运行任何颜色算法,还能读取温度值以优化颜色算法。
多种通信模式:支持LVDS模式(用于E3731i之间的通信)、MCU模式(简化与标准MCU的通信)、EOL模式(标识菊花链中的最后一个单元)和CAN模式(通过CAN-FD收发器让多个PCB的跨板通信变得稳定可靠)。
灵活的通信架构:既支持单向通信,也支持双向半双工和单向回环模式,能够满足不同的系统架构需求。
光学测量数据:在10mA和50mA两个设定点提供光学测量数据,使微控制器能够进行PWM计算或校准,以实现非常精确的颜色设定点。
温度补偿功能:内置温度传感器,能够在睡眠或激活设备状态下读取温度值,通过温度补偿优化颜色算法,确保在不同温度条件下颜色的一致性和准确性。
高亮度与稳定性:在典型发光角度120°(朗伯发射体)下,红、绿、蓝三种颜色的LED在10mA和50mA电流下均具有较高的亮度,且亮度在-40°C至125°C的结温范围内保持稳定。
抗腐蚀与ESD保护:具有2B级抗腐蚀性,符合AEC-Q102-003认证,ESD保护等级如下,确保在汽车环境中的可靠性和耐用性。
自动寻址功能:在菊花链中能够自动为每个封装分配地址,简化了系统集成和控制过程。
兼容性与扩展性:兼容多种微控制器和CAN-FD收发器,支持通过单端曼彻斯特编码通信连接到MCU,或通过LVDS进行设备间通信,方便系统扩展和与其他组件集成。
如果控制的LED不多,一个PCB就能满足,如下方案框图比较常见。
E3731i可以借助CAN FD收发器进行跨板通信,如下是两种带CAN FD收发器的双向菊花链通信的方案框图,前者在控制板也放了一个E3731i,后者的控制板没有放E3731,需要MCU在接收模式下曼彻斯特信号进行解码。
除了双向菊花链通信,E3731i还支持回环菊花链通信,常见的两种方案框图如下:
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从主机模式切换到从机模式。
注意:
理想情况下,当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协议,所以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
3.3.1 供电器件
3.3.2 被动元件
滤波电容:建议将滤波电容尽可能靠近VDD引脚放置,以减少电源噪声对设备性能的影响。
上拉/下拉电阻:用于通信模式选择。推荐值为2.2kΩ至25kΩ,具体取决于通信模式。如果使用3.3V逻辑电平的组件,可以使用高达60kΩ的电阻。
MOSI解耦电阻:可选,用于减少信号反射和干扰,推荐值为2.2kΩ。
配合3.2章节的应用框图,几个电阻电容的参数总结如下表。
3.3.3 MCU
以下是一些推荐的微控制器型号:
3.3.4 CAN FD收发器
E3731i支持所有标准的CAN FD收发器,需要CANH、CANL引脚为5V电平标准,TXD、RXD引脚支持3.3V或5V电平。以下是一些推荐的收发器型号:
这一章节主要针对E3731i的基础操作进行介绍。
如下是基础操作序列的示例,用于在由100个LED组成的菊花链上设置静态或动态的温度控制颜色(渐变)。操作分为三个阶段:设置阶段、主循环和关机阶段。
4.1.1 设置阶段
连接电源后,等待约1毫秒,直到设备准备好。
通过广播发送设置配置命令,例如启用CRC校验、设置SPI时钟极性等。
发送INIT命令(双向或回环模式),并等待最后一个单元的响应。
对每个单元进行配置:
4.2.2 主循环(每次从BCU接收到新输入执行)
从车身控制单元(BCU)获取每个单元的目标颜色。
根据存储的数据,为每个单元计算新的PWM设置。
更新每个单元的PWM设置。
4.2.3 稳定化循环(持续执行)
从一个单元读取状态和温度。
检查是否有错误发生。
根据新的温度,为该单元计算新的PWM设置。
更新该单元的PWM设置。
继续下一个单元:重复上述步骤,直到所有单元都处理完毕。
4.2.4 关机阶段
发送GO_SLEEP命令,将设备切换到SLEEP模式。
断开设备的电源连接。
E3731i的状态机如上图,各个状态介绍如下:
POR:芯片处于off状态
UNINITIALIZED:芯片上电后自动进入该状态,PWM值为0以及LED驱动disabled。在这个状态下,芯片只能响应如下几个命令:
其它命令会被忽略。广播消息会快速向前转发,而带地址的消息需要接收节点完全收到后才会向前转发。
SLEEP:E3731i收到INIT命令、GO_SLEEP命令、FAULT事件等(详细看状态机图),会进入该状态。该状态下LED驱动disabled但是最后一个PWM参数会被保存,不会重置为0,所以该状态下可以更新PWM参数。
ACTIVE:E3731i在收到GO_ACTIVE命令并且当前没有错误的情况下会进入该状态。该状态下,LED驱动会按照每个通道的电流、PWM频率、占空比配置去使能,并且后续可以更新PWM参数。进入该状态后,通道的开短路检测也会打开。
DEEPSLEEP:E3731i在收到GO_DEEPSLEEP命令会进入该状态。该状态下功耗和SLEEP接近。后续在新的IC产品上功耗会做的更低。
当E3731i供电正常,或者收到RESET命令,会在上图的PoR段执行以下的启动序列。
寄存器恢复到默认值。
加载存储在非易失性存储器中的校准设置,并检查其完整性。如果检测到校准设置与内部CRC(循环冗余校验)不匹配,STATUS寄存器中的OTPCRC标志会被设置。
设备会检查每个SIOx引脚的电压电平,以确定通信模式。在检测通信模式时,SIOx_P和SIOx_N引脚会被短接约40微秒,以便设备能够正确检测引脚的电平状态。
E3731i进入UNINITIALIZED状态,并准备好接收第一个命令。
整个启动序列大概需要1ms。
注意:如果SPI接口已经启用,SIOx引脚的短接操作可能会被MCU误认为时钟边沿。因此设计MCU的程序需要避开该情况。
4.4.1 故障标志位
E3731i提供了多种内置诊断功能,用于自动检测故障条件。如果检测到故障,相应的故障标志位会被设置。这些标志位可以通过以下几种方式清除:
4.4.2 故障处理
如果选用了相应的故障处理选项,E3731i会在检测到故障时自动关闭LED驱动器,并切换到SLEEP模式,以防止设备损坏。这确保了即使某个设备出现故障,整个链式通信仍然可以正常进行。
4.4.3 故障类型
E3731i支持以下几种故障检测:
Overtemperature(过温故障):
当IC结温超过过温阈值时,会触发此故障。该故障标志位只能在温度下降到过温释放阈值以下时清除。
用户可以通过SETSETUP命令控制过温阈值的具体值。
Undervoltage(欠压故障)
Driver open / short(LED驱动开路/短路故障)
当LED驱动引脚的电压持续高于LED开路阈值电压或低于LED短路阈值电压,并且持续时间超过去抖时间时,会触发此故障。
这些故障条件会针对每个通道分别检测,但在设备进入ACTIVE模式后,只有当通道的PWM值大于最小值时,才会进行开路/短路检测。
在ACTIVE模式下,如果某个通道的PWM值低于最小值,然后又重新设置为大于最小值,会重新进行开路/短路检测。
注意:建议在设置中启用开路/短路故障标志位,以便在检测到故障时将设备切换到SLEEP模式。
E3731i为每个LED提供了日间和夜间电流设置下的内置校准数据,以及IC内部的内置温度传感器。这些功能共同实现了在整个色域和工作温度范围内的高精度颜色控制。
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占空比可以通过以下步骤计算得出:
其中,A1,A2,A3是通过将矩阵A的第1、2或3列替换为目标向量后得到的3x3矩阵。3x3矩阵的行列式一般计算公式为:
最后,为了使用SETPWM命令,需要将这些占空比乘以所选PWM频率下的最大PWM值:2 ^15−1=32767。
注意:对于1kHz PWM频率模式,应使用相同的PWM设置,因为内部会自动将其调整为14位分辨率。
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的亮度损失,可以实现良好的温度稳定化,可以使用简单的线性因子(这些值仍处于早期状态,可能会发生变化):
或者使用查表:
其中, 可以从下表中查询得到:
5.2.4 简单温度补偿 - II
通过使用如下两张查找表,可以更好地补偿所有三个LED(红、绿、蓝)。这些表针对D65白点进行了优化。
5.2.5 优化的温度补偿函数
LED校准参数的温度依赖性可以通过二次函数很好地描述:
其中:
结合存储的校准数据,可以计算出在任何温度下所需的PWM值的校准数据。下表中给出了常数的值。
示例:
在夜间模式下,温度为87.8°C(ADC = 198)时,红色LED的校正Iv为:
[图片]
E3731i的通信基于一种专用的主从串行总线协议,称为开放系统协议(OSP)。除了基础协议外,E3731i还实现了其他专用命令。
曼彻斯特编码
E3731i使用了不同的编码方式,其中Manchester编码基于IEEE 802.3标准,逻辑“1”由上升沿表示,逻辑“0”由下降沿表示。
在E3731i到MCU的单线通信中,时钟极性可以通过命令选择。默认设置使用上升沿。
示例波形
下面四张图为示例波形,其中内部信号仅供参考。内部时钟指示数据位的长度。结合3.1和3.2章节更方便理解。
OSP是一种基于消息的协议,其通用消息帧格式如图14所示。
传输的顺序为MSB(高bit先传输),MCU和E3731i的双向传输格式都是一样的。帧格式说明如下:
注意: 避免使用前导码不正确的消息,因为这可能导致错误的消息沿着链路被转发,并且会引发CE_FLAG置位。
地址(Address,10位):下行消息(MCU发送给E3731i的消息)允许的值为0x000(用于广播)和0x001到0x3ef(用于独立节点)。上行消息(E3731i发送给MCU的消息)始终包含发送方的地址。并非所有命令都允许在广播消息中使用,详见后续的命令章节。
PSI(3位):PSI字段指示有效载荷的长度(以字节为单位)。其值必须与每个命令的预期值匹配(可能因消息上下行方向而异)。
总消息长度为PSI + 4字节。
注意:
PSI值0b101不被允许,即使在未直接寻址的单元中,也会引发通信错误。 如果PSI值大于有效载荷,可能会导致有效载荷被前面消息的垃圾数据填充。在这种情况下,不会引发CE_FLAG。
命令(Command,7位):详见后续的命令章节。
有效载荷(Payload,0到64位):可变有效载荷字段。长度必须与PSI字段中给出的值匹配。
CRC(8位):详见后续的CRC章节”。
广播
地址为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连接不良可能导致这种行为。
CRC字段包含对整个消息(不包括CRC字段本身)进行计算得出的CRC8校验字。
注意:
此实现使用和AUTOSAR相同的多项式,但由于初始值和XOR值为0xFF,因此与AUTOSAR实现不兼容。 在非易失性存储器(OTP)中,CRC字段的计算方向为LSB优先。
E3731i支持以下命令。
如果E3731i接收到未在下表中列出的命令,并且PSI大于0,则会引发通信错误。如果PSI为零,则消息会被静默忽略。
6.5.1 RESET
6.5.2 CLRERROR
6.5.3 INITBIDIR
注意:
如果节点地址达到0x3fe,会停止自动寻址流程并返回地址0x3fe给MCU。 如果一个节点已经初始化了地址,自动寻址命令会被忽略,但会转发该命令(地址+1)给下一个节点,这个可以用来在复位之后有选择性的初始化某些节点。在这种应用中,建议不要使用非0x001的地址去初始化菊花链。 如果菊花链中的最后一个设备不是EOL模式(例如,使用CAN-FD连接),则需要应用层确保菊花链的长度正确,并且主设备能够正确处理最后一个设备的响应。 该命令不支持广播模式,如果使用广播地址0x000发送,所有节点会将CE_FLAG置位,并且最后一个节点会使用地址0x000返回寄存器TEMPSTAT的值。
6.5.4 INITLOOP
6.5.5 GOSLEEP
6.5.6 GOACTIVE
6.5.7 GODEEPSLEEP
6.5.8 IDENTIFY
6.5.9 READSTATUS
6.5.10 READTEMPST
6.5.11 READCOMST
6.5.12 READLEDST
6.5.13 READTEMP
6.5.14 READOTTH
6.5.15 SETOTTH
6.5.16 READSETUP
6.5.17 SETSETUP
6.5.18 READPWM
6.5.19 SETPWM
6.5.20 READOTP
在E3731i的使用手册的5.3章节中,提供了一个示例:
这里篇幅有限就不进行介绍了,感兴趣的读者可以根据文末的连接下载查看。
在E3731i的使用手册的5.3章节中,提供如下三个关键功能的参考代码,感兴趣的读者可以自行下载查看。
曼彻斯特编码的实现
帧消息的CRC校验
OTP存储内容的CRC校验
为了方便客户快速熟悉E3731i,ams-OSRAM提供一套E3731i评估板,可以搭配S32K144EVB进行评估,如下图所示。
除了评估板之外,ams-OSRAM还提供了配套评估板的S32DS工程以及上位机。S32DS工程实现的功能主要有:
关于评估套件的详细资料,可以找ams-OSRAM原厂进行申请。
OSIRE® E3731i - Startup Guide: https://look.ams-osram.com/m/3ba9f6b3c2dd7647/original/OSIRE-E3731i-Startup-Guide.pdf
[2]KRTBI D2LM31.31: https://look.ams-osram.com/m/66c7ed18a715934c/original/KRTBI-D2LM31-31.pdf