內容提要
引言
云途配置工具(YCT - Yuntu Config Tool)自去年Q4推出以來,已經有不少云途車規MCU的客戶在實際項目使用了。它簡明快捷高效的SDK和MCAL配置界面以及強大的工具鏈整合能力大大提高了用戶汽車電子ECU應用代碼的開發效率,深受好評。
Tips:關于云途YCT工具的功能特性(features)、下載安裝和使用請參考以下公眾號文章(點擊文章標題即可直接跳轉閱讀):
《云途配置工具(YCT)快速上手指南(QSG)》
隨著云途車規MCU型號的日益增加(cover越來越多汽車電子應用),云途SDK和MCAL也在不斷升級,作為配套的圖形化配置工具YCT也進行了若干次升級,在修改已知bug的同時也新增了不少新功能。
最近,云途車規MCU的非AUTSOAR架構驅動軟件包 - YTM32 SDK進行了一次比較大的升級,強烈推薦大家將之前使用的SDK升級到最新的RTM v1.1.1版本,以快速修改已知云途車規MCU外設底層驅動代碼的bug及硬件勘誤表(Errata)的Workaroud,以下為YTM32 SDK RTM v1.1.1版本的Release note的下載鏈接,供大家參考:
為了方便大家進行SDK的快速升級替換,特撰寫本文介紹升級YCT創建的云途SDK配置工程的詳細步驟和方法。
確認當前應用工程的YCT配置工程使用的SDK/MCAL版本
打開應用工程根目錄下的YCT工程,在YCT的頂行Home菜單旁邊即為當前YCT工程使用的SDK或者MCAL的版本信息。
MCAL的YCT配置工程:
SDK的YCT配置工程:
確認要升級目標版本的SDK/MCAL軟件包已經安裝好
通過YCT主頁界面的SDK/MCAL升級界面確實確認要升級目標版本的SDK/MCAL軟件包已經安裝好,比如本文想要將上面的MD14的v0.8.1版本SDK的應用工程升級到v1.1.1版本:
修改YCT文件中的SDK版本信息
使用任意文本編輯器,比如Notepad++或者在VSCode中雙擊打開工程根目錄下的yct文件,Ctrl + F查找“sdkVersion”配置:
將其從原有的“0_8_1”修改為新版本“1_1_1”,并保存:
修復YCT工程中的SDK外設差異配置error
接下來,使用YCT工具打開上一步驟修改后的應用工程YCT文件,修改Problems窗口提示的所有配置error。
本文示例工程,打開后有eTMR/PWM和CAN兩個配置報錯,下面介紹具體修復方法。
4.1 修復CAN驅動模塊的波特率配置錯誤
在v0.8.1版本SDK的CAN通信波特率配置中傳輸段(Propagation Segment)、相位段1(Phase Segment 1)、相位段2(Phase Segment 2)和時鐘預分頻因子(Prescaler Division factor)在配置時會將配置值減1寫入FlexCAN模塊的寄存器,而在新版本v1.1.1 SDK中這些配置將被直接寫入FlexCAN模塊的寄存器,因此,為了實現相同的波特率(500Kbit/s)相應的配置值需要減1。
v0.8.1版本的CAN波特率配置在v1.1.1中為錯誤配置:
v1.1.1版本SDK中相應波特率(500kbit/s)的正確配置如下:
4.2 修改eTMR/PWM驅動模塊的配置錯誤
v1.1.1版本SDK相對于之前老版本的SDK驅動和配置界面做了一些bug修改,因為需要先Disable ETMR模塊的配置,然后重新Enable進行配置才能解決相關error。
首先、Disable ETMR驅動模塊,之前的配置信息將全部丟失:
然后,重新Enable ETMR模塊,添加Common配置:
使能PWM配置,并根據原有工程的需求添加PWM通道配置:
Tips:為了減少應用代碼中調用SDK配置參數的修改,需要將以上ETMR驅動模塊的Common和PWM配置的配置結構體名字和配置參數保持與原工程相同。
重新生成工程和替換SDK底層驅動
將以上配置error全部修復之后,點擊保存(Save),然后重新生成(Generate):
點擊確認覆蓋(OverWrite)原有工程的SDK驅動靜態代碼即可完成SDK驅動更新和版本升級:
Tips:連續點擊多個文件覆蓋后,YCT會提示是否覆蓋所有文件,點擊“OK”確認即可快速完成覆蓋替換:
重新編譯應用工程,修改編譯錯誤
重新編譯工程,根據編譯錯誤和SDK releasenote中的bug list,修復/調整所有SDK API的參數,比如PWM占空比更新函數--eTMR_DRV_UpdatePwmChannel()的0.8.1與1.1.1版本SDK的差異如下:
------------------------------------------------------------- //v10.8.1 SDK: ------------------------------------------------------------- /*! * @brief This function updates the waveform output in PWM mode (duty cycle and phase). * * @param [in] instance The eTMR peripheral instance number. * @param [in] channel The channel number. In combined mode, the code finds the channel. * @param [in] typeOfUpdate The type of PWM update in the duty cycle/pulse or in ticks. * @param [in] alignMode The alignment of PWM update in the duty cycle/pulse or in ticks. * @param [in] dutyCycle Duty cycle of PWM. * @param [in] offset the offset from counter initial value to the first rising edge. * It is used for asymmetrical alignment pwm. When in edge align and * center align pwm mode, it is forced to 0. * @return success * - STATUS_SUCCESS : Completed successfully. * - STATUS_ERROR : Error occurred. */ status_t eTMR_DRV_UpdatePwmChannel(uint32_t instance, uint8_t channel, etmr_pwm_update_option_t typeOfUpdate, etmr_pwm_align_mode_t alignMode, uint32_t dutyCycle, uint32_t offset); ------------------------------------------------------------- //v1.1.1 SDK: ------------------------------------------------------------- /*! * @brief This function updates the waveform output in PWM mode (duty cycle and phase). * * @param [in] instance The eTMR peripheral instance number. * @param [in] channel The channel number. In combined mode, the code finds the channel. * @param [in] dutyCycle Duty cycle of PWM. * @param [in] offset The offset from counter initial value to the first rising edge. * It is used for asymmetrical alignment pwm. When in edge align and * center align pwm mode, it is forced to 0. * @return success * - STATUS_SUCCESS : Completed successfully. * - STATUS_ERROR : Error occurred. */ status_t eTMR_DRV_UpdatePwmChannel(uint32_t instance, uint8_t channel, uint32_t dutyCycle, uint32_t offset);
在新版本SDK中,該API函數少了typeOfUpdate和alignMode兩個參數,需要將其刪除。
另外,PWM通道參數配置結構體etmr_pwm_param_t的通道配置成員名由*pwmIndependentChannelConfig改為了*pwmChannelConfig,也需要做相應的調整:
------------------------------------------------------------- //v0.8.1 SDK: ------------------------------------------------------------- /*! * @brief eTMR driver PWM parameters * * Implements : etmr_pwm_param_t_Class */ typedef struct { uint8_t nNumIndependentPwmChannels; /*!< Number of independent PWM channels */ etmr_channel_mode_t mode; /*!< eTMR pwm mode */ uint32_t uFrequencyHZ; /*!< PWM period in Hz */ etmr_counter_init_src_t counterInitSrc; /*!< Counter initial value source */ etmr_independent_ch_param_t *pwmIndependentChannelConfig; /*!< Configuration for independent PWM channels */ #if (0 == FEATURE_eTMR_SUPPORT_CHANEL_DEADTIME) uint16_t evenDeadTime; /*!< Enable/disable dead time for channel 0,2,4,6 */ uint16_t oddDeadTime; /*!< Enable/disable dead time for channel 1,3,5,7 */ #endif etmr_fault_param_t *faultConfig; /*!< Configuration for PWM fault */ } etmr_pwm_param_t; ------------------------------------------------------------- //v1.1.1 SDK: ------------------------------------------------------------- /*! * @brief eTMR driver PWM parameters * * Implements : etmr_pwm_param_t_Class */ typedef struct { uint8_t nNumPwmChannels; /*!< Number of independent PWM channels */ etmr_channel_mode_t mode; /*!< eTMR pwm mode */ uint32_t uFrequencyHZ; /*!< PWM period in Hz */ #if FEATURE_eTMR_HAS_CNT_INIT_SRC bool counterInitValFromInitReg; /*!< Counter initial value source from INIT register or not */ #endif uint32_t cntVal; /*!< Counter initial value from CNT register */ etmr_pwm_ch_param_t *pwmChannelConfig; /*!< Configuration for independent PWM channels */ #if !FEATURE_eTMR_DEADTIME_CONFIG_EACH_CHANNEL etmr_deadtime_param_t *deadtimeConfig; /*!< Configuration for PWM dead time */ #endif etmr_fault_param_t *faultConfig; /*!< Configuration for PWM fault */ } etmr_pwm_param_t;
PWM占空比更新API函數調用修改如下:
v0.8.1版本SDK調用:
/* update the PWM output duty cycle */ eTMR_DRV_UpdatePwmChannel(eTMR_INST, eTMR0_CH5_PWM_Config.pwmIndependentChannelConfig[0].hwChannelId, etmrStatePtr[eTMR_INST]->typeOfUpdate, etmrStatePtr[eTMR_INST]->alignMode, (0x8000U * pwm_duty), 0x0000U);
v1.1.1版本SDK調用:
/* update the PWM output duty cycle */ eTMR_DRV_UpdatePwmChannel(eTMR_INST, eTMR0_CH5_PWM_Config.pwmChannelConfig[0].hwChannelId, (0x8000U * pwm_duty), 0x0000U);
修復所有編譯error后,編譯成功即完成SDK升級:
總結
本文詳細介紹了基于YCT的云途SDK配置工程升級方法,希望對大家有所幫助。
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
16984瀏覽量
350294 -
汽車電子
+關注
關注
3024文章
7866瀏覽量
166497 -
ecu
+關注
關注
14文章
880瀏覽量
54404 -
SDK
+關注
關注
3文章
1026瀏覽量
45777 -
云途
+關注
關注
0文章
4瀏覽量
1934
原文標題:云途配置工具(YCT)使用指南之如何快速升級YCT配置工程的云途SDK版本
文章出處:【微信號:汽車電子expert成長之路,微信公眾號:汽車電子expert成長之路】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論