大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx系列GPIO提早供電會影響上電時序導致內部DCDC啟動失敗。
最近有一個 RW612 產品線的同事在設計一個雙 MCU 系統 Demo 時發現,當 RW612 板卡和 RT1060 板卡透過 UART 對接時,如果 RW612 板卡提前上電,RT1060 板卡後上電,會導致 RT1060 程式無法正常啟動。這其實是一個 i.MX RT 系列上典型的上電時序問題,今天痞子衡就和大家聊聊這個話題:
- Note: 本文內容以 i.MXRT1060 為例,但基本也適用其他 i.MXRT1xxx 系列。
一、快速復現問題
痞子衡同事在用兩塊 MCU 板卡(RW612+RT1060)對接時遇到了問題,想復現這個問題,其實沒有那麼複雜,我們可以用一個USB轉串列埠模組(3.3V)代替 RW612 來和 RT1060 的 ROM ISP UART 口連線:
痞子衡使用得這個USB轉串列埠模組 TXD 和 RXD 驅動能力不同,空載電壓測得均是 3.55V,但是和未上電的 RT1060-EVKB 板卡對接時,電壓會有所下降,因此痞子衡測試了不同連線組合下的 RT1060 板卡上電啟動結果:
USB轉串列埠模組一直通電 | RT1060-EVKB J46未連線 | RT1060-EVKB J46連線後 | ||||||
---|---|---|---|---|---|---|---|---|
模組TXD 晶片GPIO_AD_B0_13 |
模組RXD 晶片GPIO_AD_B0_12 |
NVCC_GPIO NVCC_SD1 NVCC_EMC |
NVCC_SD0 | DCDC_PSWITCH | DCDC_IN | VDD_SOC_IN DCDC_LP |
VDD_SOC_IN DCDC_LP |
程式啟動結果 |
未接 | 未接 | 0 | 0 | 0 | 0 | 0 | 1.275V | 啟動成功 |
未接 | 0.83V | 0.33V | 0 | 0.33V | 0.33V | 0 | 1.275V | 啟動成功 |
2.22V | 未接 | 1.42V | 0 | 1.42V | 1.42V | 0 | 0 | 啟動失敗 |
2.24V | 1.79V | 1.46V | 0 | 1.46V | 1.46V | 0 | 0 | 啟動失敗 |
從測試結果可以看到,RT1060 程式啟動失敗的主要原因是板卡上電後,VDD_SOC_IN 上沒有電壓(即主晶片內部 DCDC 沒有輸出)。
二、內部DCDC上電時序要求
在分析啟動失敗問題前,首先需要簡單瞭解下 i.MXRT1xxx 晶片內部的 DCDC 模組。在一些成本敏感的應用中,首推使用晶片內部 DCDC 供電給核心,因此 DCDC 模組能否正常啟動決定了核心能否正常執行。
在恩智浦官網文件 《i.MX RT Hardware Development Guide for the MIMXRT1050/MIMXRT1060 Processor》 裡對上電時序做了如下嚴格規定,其中最常發生問題的地方就是有效 DCDC_PSWITCH 和 DCDC_IN 之間至少 1ms 的延時(以 DCDC_IN 穩定在 3V 為時間起點,以 DCDC_PSWITCH 上升到 1.5V 為時間終點),如果不滿足這個 1ms 延時要求,內部 DCDC 模組則可能會啟動失敗,無法正常輸出電壓給核心(DCDC_LP 腳)。
• The VDD_SNVS_IN supply must be turned on before any other power supply or connected (shorted) with the VDD_HIGH_IN supply.
• If a coin-cell battery is used to power VDD_SNVS_IN, ensure that it is connected before any other supply is switched on.
• An RC delay circuit is recommended for providing the delay between DCDC_IN stable and DCDC_PSWITCH. The total RC delay should be 5-15 ms.
• DCDC_IN must reach a minimum 3.0 V within 0.3 x RC.
• The delay from DCDC_IN stable at 3.0 V min to DCDC_PSWITCH reaching 0.5 x DCDC_IN (1.5 V) must be at least 1 ms.
• The power-up slew rate specification for other power domains is 360 V/s – 36k V/s.
• POR_B must be held low during the entire power up sequence
三、GPIO提早供電的影響
現在我們檢視一下 RT1060-EVKB 原理圖設計,外部電源輸入 DCDC_3V3 負責給 NVCC_GPIO/SD1/EMC 以及 DCDC_IN 供電,同時 DCDC_IN 也經過了一個 RC 延時電路供電給 DCDC_PSWITCH,這是符合硬體設計要求的。
由於 RT1060 上 GPIO_AD_Bx 和 GPIO_Bx 兩組 PAD 供電均來自於 NVCC_GPIO,當其中任何一個 GPIO 有電壓時,均可能會漏電到 NVCC_GPIO。因此我們提前將 USB 轉串列埠模組透過 ROM ISP UART 連到板卡,即會漏電到了 NVCC_GPIO->DCDC_3V3->DCDC_IN->DCDC_PSWITCH,即相當於給 DCDC_PSWITCH 的 RC 電路預充了一定電,等板卡正式上電,RC 電路升壓到 1.5V 的時間就會縮短。這也就是上個小節表格裡為何 DCDC_PSWITCH 預充到 0.33V 時不影響上電時序,而預充到 1.42V 時就不行了,因為延時小於 1ms 了。
根據 RT1060-EVKB 這樣的電源電路設計,不僅僅 ROM ISP UART 兩個引腳提前上電會影響晶片啟動,屬於 NVCC_GPIO/SD1/EMC 供電下的任何一個 GPIO 提前上電都會產生相同的效果。但是 NVCC_SD0 供電下的 GPIO 則不會影響啟動,因為它在走線上和 DCDC_PSWITCH 之間沒有連線。
四、多板卡連線的解決方案
現在我們知道了問題產生的原因,以後遇到此類問題,第一時間先去測量 i.MXRT1xxx 內部 DCDC 輸出(DCDC_LP)的電壓(如果為 0,則一定是上電時序問題)。那該如何規避問題呢?以與 RT1060-EVKB 連線為例則有如下三個方法:
- 方法一: 兩個板卡之間用 UART 訊號連線時串上隔離電阻(比如1K歐姆),這樣能降低漏電到 NVCC_GPIO 的電壓(以實測為準)。
- 方法二: 選用不干擾 DCDC_PSWITCH 訊號的 GPIO 組(對於 RT1060-EVKB,則是 GPIO_SD_B0_xx 引腳)進行連線。
- 方法三: 將 RT1060-EVKB 板卡,改為外部 PMIC 供電,棄用主晶片內部 DCDC。
至此,i.MXRT1xxx系列GPIO提早供電會影響上電時序導致內部DCDC啟動失敗便介紹完畢了,掌聲在哪裡~~~
歡迎訂閱
文章會同時釋出到我的 部落格園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。