1.ISELED 介紹
1.1 前言
現(xiàn)在主流的車內(nèi)氛圍燈方案分為兩種,一種是帶自動尋址功能的LIN總線方案,代表的芯片如ELMOS的E521.31/E521.36,邁來芯的MLX81106/MLX81108,英迪芯的IND83209/IND83211。一種是使用了ISELED技術(shù)的Smart RGB LED方案(將LED Driver&Controller和LEDs封裝在一起),代表芯片如統(tǒng)明亮的seddLED 3.0系列,弘凱光電的iCLed系列等。兩種方案的對比如下表:
1.2 ISELED聯(lián)盟
ISELED聯(lián)盟是一個開放的工業(yè)聯(lián)盟,其目標是開發(fā)一個基于 ISELED 技術(shù)的綜合生態(tài)系統(tǒng)——即用于創(chuàng)新汽車照明的完整系統(tǒng)解決方案。如今,已有多家制造商提供的各種ISELED產(chǎn)品。
從2016年底(ISELED 成立時)最初的5個成員,聯(lián)盟成員的數(shù)量已增加到 30多家公司和機構(gòu)。聯(lián)盟成員如下圖,包含LED廠商,MCU廠商,汽車零部件廠商等。
ISELED聯(lián)盟成員
1.3 ISELED產(chǎn)品
ISELED官網(wǎng)的產(chǎn)品分如下幾種:
ISELED系統(tǒng)框圖
以上圖為例,簡單介紹一下這幾種產(chǎn)品,
- INLC10AQ屬于LED Driver & Controller,主要負責通信協(xié)議和驅(qū)動LED。目前這部分產(chǎn)品只有Inova能提供
- A3A-FKG-1400-1屬于Smart Digital LEDs,可以認為是INLC10AQ和LED的結(jié)合體。目前這部分產(chǎn)品有四家能提供,分別是統(tǒng)明亮、弘凱、億光和歐司朗,做這類產(chǎn)品需要找Inova購買LED Driver & Controller然后和自家的LED進行結(jié)合,最終變成Smart Digital LEDs。
- S32K屬于ISELED主機節(jié)點指定的MCU,NXP提供了基于S32K的ISELED驅(qū)動庫,客戶使用S32K可以很方便的和Smart Digital LEDs進行通信并實現(xiàn)各種燈效。目前這部分產(chǎn)品主要有兩家能提供,除了NXP還有Microchip。
- ADK屬于應(yīng)用和開發(fā)套件,方便客戶快速評估ISELED方案。目前能提供ADK的主要是Inova和feno兩家公司。
1.4 ISLED應(yīng)用方向
ISELED目前應(yīng)用方向有三個,分別是:
- AMBIENT LIGHTING,環(huán)境照明,如車內(nèi)靜態(tài)氛圍燈。
- FUNCTIONAL LIGHTING,功能照明,如人手脫離方向盤時進行警示。
- DYNAMIC LIGHTING EFFECTS,動態(tài)燈效,如儀表盤的動態(tài)背光燈。
2.ISELED Driver獲取及安裝
本篇文章主要介紹基于S32K144控制的ISELED方案試用,所以需要先準備好S32K1的ISELED軟件驅(qū)動。
S32K1xx的官方IDE安裝之后是不帶ISELED驅(qū)動的,需要從NXP官網(wǎng)下載對應(yīng)的exe文件并選擇IDE的安裝目錄進行覆蓋安裝,才能使用ISELED功能。
2.1 ISELED Driver獲取
1.瀏覽器中輸入S32K-ISELED LED Lighting Solution^[1] ^的鏈接,并登錄在NXP官網(wǎng)注冊的個人賬號,如下圖:
2.點擊 Design Resources ,往下移動到 Softeware ,能看到S32K SDK ISELED driver的下載選項,如下圖:
3.點擊下載按鈕,在跳轉(zhuǎn)的界面點擊 Previous ,能夠看到RTM 4.0.0版本的ISELED驅(qū)動:
4.點擊 SW32K1-ISELED-RTM-4.0.0 ,在彈出的協(xié)議界面點擊同意,會跳轉(zhuǎn)至如下界面,接著點擊S32K1_ISELED_RTM_4.0.0.exe進行下載,建議ReleaseNotes也下載一下,里面包含了對SDK的要求;
5.下載的同時,點擊 License Keys ,會跳出如下界面;
6.勾選復(fù)選框,點擊Generate,彈出如下界面;
7.點擊Save All按鈕,會將license文件下載到本地。
2.2 ISELED Driver安裝
2.2.1 安裝前準備
打開上一章節(jié)提到的 S32K1_ISELED_RTM_4.0.0_ReleaseNotes.pdf ,可以看到ISELED RTM4.0.0的驅(qū)動包是和S32K1xx的RTM3.0.0,RTM3.0.1, RTM3.0.2匹配的,所以安裝ISELED驅(qū)動之前,先要保證安裝了S32DS For ARM 2.2,這個開發(fā)環(huán)境自帶的就是S32K1xx的RTM3.0.0版本的SDK。
ISELED ReleaseNotes
2.2.2 安裝注意事項
在S32DS for ARM 2.2安裝好之后,雙擊S32K1_ISELED_RTM_4.0.0.exe進行安裝,安裝過程中需要加載之前保存的license文件以及選擇S32DS安裝目錄下的S32K1xx_RTM_3.0.0文件夾,如下面兩張圖:
2.2.3 安裝后檢查
安裝完,可以檢查下S32K1xx_RTM_3.0.0文件夾內(nèi)的相關(guān)文件夾是否有了ISELED相關(guān)的文檔和庫文件。
3.ISELED方案試用
3.1 Demo方案介紹
由于手上沒有ISELED的ADK,只能利用S32K144開發(fā)板加上之前客戶送的一套ISELED燈板搭建一套演示套件
整體的demo框圖如下所示:
ISELED DEMO 框圖
3.2 編寫Demo程序
3.2.1 圖形化界面配置
1.打開S32DS2.2,新建application工程,命名為 S32K144EVB_ISELED_Demo_Test ,并選擇S32K144_SDK 3.0.0版本。
2.等界面加載完成后,添加ISELED組件,如下圖,和其相關(guān)的其他組件也會自動添加。
3.打開ISELED組件,按下圖配置,相關(guān)參數(shù)后面章節(jié)再詳細介紹。
4.打開timing_pal組件,使用lpit定時器的通道0。
5.打開時鐘組件,使能Flexio時鐘。
至此,圖形化界面配置結(jié)束。
3.2.2 main函數(shù)編寫
首先是clock,timing,iseled的初始化,如下所示:
int main(void)
{
/* Write your local variable definition here */
testInitType.crcEnable = 1;
testInitType.firstLedAdr = 1;
testInitType.tempCmpEnable = 0;
testInitType.voltSwing = 0;
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
#ifdef PEX_RTOS_INIT
PEX_RTOS_INIT(); /* Initialization of the selected RTOS. Macro is defined by the RTOS component. */
#endif
/*** End of Processor Expert internal initialization. ***/
/* Write your code here */
/* For example: for(;;) { } */
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_FORCIBLE);
/*Initialize timing pal instance used by the ISELED Driver for the timeout mechanism*/
TIMING_Init(&timing_pal1_instance, &timing_pal1_InitConfig);
digLED_Init_Interface(NUMBER_OF_INTERFACES, iseled1_InitConfig);
digLED_Init_Strip(&testInitType, &digLEDResultStrip1, strip);
其中,
digLED_ReturnType digLED_Init_Interface(uint8_t nrOfInterfaces, const digLED_ConfigType *configStruct);
主要是進行ISELED接口的配置,如選擇Flexio還是SPI,控制多少路ISELED,選用哪些引腳,外設(shè)的超時時間,使用中斷還是DMA等。digLED_ReturnType digLED_Init_Strip(const digLED_InitType* ChainInitPtr, digLED_ReadDataResultType* ChainInitResultPtr, uint8_t StripNr);
主要是針對具體某一路ISELED的通信協(xié)議進行配置,如首ISELED的地址,是否進行CRC校驗,差分電壓幅值,是否進行相位偏移等。
然后調(diào)用digLED_ReturnType digLED_Set_RGB(uint8_t Red, uint8_t Green, uint8_t Blue, uint16_t Address, uint8_t StripNr);
實現(xiàn)燈效。其中Red,Green,Blue用于設(shè)置燈顏色的RGB值,Address代表要設(shè)置的ISELED芯片地址(0代表設(shè)置所有ISElED),StripNr代表要設(shè)置第幾路ISELED。
如設(shè)置紅色單顆流水效果的代碼如下:
void RunWaterRed(void)
{
OSIF_TimeDelay(1);
digLED_Set_RGB(0 , 0 , 0 , 0, strip);
OSIF_TimeDelay(1);
uint8_t ledNr;
uint8_t r = 255, g = 0, b = 0;
for(ledNr=1; ledNr<=NUM_OF_LED; ledNr++){
digLED_Set_RGB(r , g , b , ledNr, strip);
OSIF_TimeDelay(100);
digLED_Set_RGB(0 , 0 , 0 , ledNr, strip);
OSIF_TimeDelay(1);
}
}
3.2.3 Demo工程分享
整套工程代碼的鏈接如下:
- 鏈接:https://pan.baidu.com/s/1Bx5gTDurymVcxB1y-SSTwA
- 提取碼:5bkl
3.3 Demo測試
測試效果如下(因為大小限制,只剪輯了一部分效果):
3.4 ISELED組件說明
由于ISELED組件的參數(shù)比較多,如下圖在這里著重說明一下。
ISELED組件參數(shù)
- Interface,選擇ISELED的接口,主要選項有Flexio,LPSPI0,LPSPI1和LPSPI2。
- Strip Number,表示第幾路ISELED,最多可以有13路,其中Strip1到strip10使用Flexio接口,Strip11到Strip13使用LPSPI接口。
- Data Pin和Clock Pin,選擇和第一個ISELED芯片連接的數(shù)據(jù)引腳以及時鐘引腳。ISELED芯片直接通過差分總線相連,只有和MCU相連接的ISELED芯片(首地址芯片)走同步信號。
注意Data Pin和Clock pin不能選擇相同的Logical pins。以下圖為例,選擇PTA10為data pin時,不能選擇PTD0或者PTD9為Clock pin,因為他們都屬于FXIO_D0。
- DMA配置,如果使能了DMA配置,下面的DMA接收、發(fā)送通道以及EDMA組件也需要同步配置。
- callback,回調(diào)函數(shù)設(shè)置,如果填寫了回調(diào)函數(shù)名稱,當指令接收、發(fā)送完成,或者發(fā)生超時,CRC error等錯誤時,會調(diào)用該函數(shù)。
- Timer channel,配置iseled調(diào)用的定時器通道,需要同步在timing_pal進行配置。
- timeout duration,配置三種指令的超時時間,分別是初始化,讀和ping。
超時時間推薦的計算公式如下(N代表LED數(shù)量,最終計算結(jié)果的單位為us):
- Interface CLK,顯示選擇的接口的時鐘來源,注意在clockMan組件使能對應(yīng)的時鐘。
- Timer CLK,顯示使用的定時器的時鐘來源。
評論
查看更多