PORTS 問題:數位接腳被強制為 0V,忽略寄存器設定

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

 

我只想分享我對 XMC4500 和 XMC4700 有的一些經驗。

 

我過去在這裡遇到了一個問題(不要去看它("XMC 在鎖定場景..."),因為它現在已完全停用),並以為我正在嘗試 SSW 問題(啟動軟件)。 現在我已經確切發現上週發生了什麼。 我正在進行一些測量,使我查看具有 10k 拉伸電阻的 XMC 輸入引腳的水平為 3.3V,同時記錄 XMC RAM 中的內部值,這使我看到我錯誤(即完全沒有鎖定),並且它為我提供了一種簡單的方法來以我可以通過可以進行測量的方式重現問題(以前我有點缺少)所有的安全(當時很不安全)。

 

我們有一個專用的板,可以在惡劣的環境中工作,它上面有 XMC4X00,以及一個外部監視機構。 我們保護它非常好,但我們在現場仍然存在一些罕見問題。 我們上面有 LED。 當問題發生時,它們都會亮起(這就是讓我認為我的主機板被卡住在 XMC 的某種 3 狀態初始化中,但不是)。

在我們的實驗室中,我們可以使用設置為 5.5kV 5kHz 5ms 的爆炸發生器重現問題。 然後,我們將 1pF 耦合應用於 XMC 的隨機 GPIO 引腳上。 我們確實用 1nF 電容器保護引腳,因此由於耦合,XMC 引腳獲得非常有限的干擾電流。

發生的是在爆發過程中,PORST 周邊設備受到硬件干擾。 人可以假設 GPIO 上讀取的級別是隨機的,例如 1,0,0,1,0,0,1 等,但實際上還發生了其他事情。

 

 

問題可以是暫時性或永久性的。 它的作用是,所有具有輸出驅動程序的端口都設置為輸出低(我沒有檢查個引腳,但是我在 P1,2,3,4,5 中訪問的所有端口都是)。 發生這種情況時,我可以讀取 PORTS 的寄存器,所有內容都設置在我的初始化期間。 因此 PORST 寄存器的內容與引腳的行為不對應。

Relafe_1-1698753305328.png

請注意,設置為輸入的引腳也被硬件強制為 0V。 我嘗試了一些事情,例如確保沒有休眠,硬件控件被禁用,甚至嘗試將 OUT 寄存器初始化為我的輸入(認為它可能會將其縮短到高水平,但沒有),但沒有任何幫助。

 

唯一已知的解決方法是重設 PORTS 周邊設備。 一旦重置,引腳從硬件強制的低狀態轉為 3 狀態。 如果再次編程,一切都按預期運作。

對於我的項目來說,這很煩人。 好的是 PORTS 切片 IN 寄存器內容仍然如預期工作。 因此,我可以檢測何時發生問題,因為我讀取所有輸入都是低水平(在另一個正常情況下永遠不會發生)。 如果連續 1 毫秒發生這種情況,我會發出全局 SWReset。

偶然,我的 PWM 有效率低,但啟用閘極為激活性高。 我也有一個外部監護機。 而 XMC 可以通過將引腳放低來重置它。 因此,當 PORTS 周邊設備鎖定時,我的系統會自動進入安全狀態。

需要注意的一件事是,沒有輸出驅動程序的 PORT 14 和 15 不會受到影響。 所以我的 ADC 仍然給我正確的值。 更好的是,我在 P14-15 上放了一些重要的數字輸入。 它們正常工作,它幫助我弄清楚我是否應該執行 SWReset。

Relafe_2-1698753337725.png

所以我的系統可以在安全狀態下運行正常,只需 PORT 1,2,3,4,5 強制升級。 我的所有其他周邊設備都正常運行。 計時器執行正確的計時,中斷正常工作,代碼執行了編程的操作等。 這只是一個 I/O 問題。 顯然,我的輸入被強制為 0V 並不太驚訝,尤其是因為我的輸入是其他輸出,所以它會短短。 實際上,短褲似乎對我來說並不是很有問題,因為一切都是內部電流限制的。

 

順便說一句,我認為 PORST 問題應該添加到錯誤中。即使有因應措施:連接埠重設。
XMC 輸入上的簡單外部拉拉可以足以進行偵測和解決方法。 也許它甚至可以使用內部弱拉起來。

 

以下是一個測量的示例:
我有一個藍色的外部 100us 時鐘(實際上沒有連接到 XMC,並且在 +1V 和 +2V 之間的差異)。 粉紅色信號是 XMC 的輸入,該輸入連接到 +3.3V 的外部 10k 拉伸器。 此引腳初始化為 XMC 中的輸入,+3.3V 電源完全不會受到干擾。

當爆發時(5ms 的 5kHz 脈衝,我們可以看到藍色信號上添加的噪聲),我們可以看到引腳被 XMC 拉到低。 這可以是暫時的,或是永久的,像上一個圖像上一樣。 請注意,即使只給出一個脈衝,也可能會發生永久性問題。 它不必在最後發生。

Relafe_0-1698753025438.png

PS:為了確定問題是什麼,我確實將輸入引腳級別和 PORTS 寄存器作為其他關鍵變量內容記錄到 RAM 中。 通過將調試器連接到運行的目標,並且放置在 startup.c 中的第一個指令上的中斷點,它會重置寄存器並停止 XMC。 RAM 內容保持不受到影響,這允許我以 100us 採樣間隔記錄突發應用程序之前和 1s 後的 1 秒,使用 gdb 進行二進制轉印 RAM 區域,並在 python 腳本中導入以瀏覽數據。 輸入水平完全匹配我可以用示波器記錄的內容。

在下面的 python 圖上,我們可以看到我的鏡頭中的粉紅色軌跡,它完全對應於箭頭末尾的橙色痕跡,這是外部拉伸輸入(粉紅色軌跡)的 XMC " 100us 採樣"。

Relafe_0-1699023069428.png

 

 

最好的問候,

休息

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/PORTS-issue-digital-pins-forced-to-0V-disregarding-the-registers-settings/td-p/632349

2 回應
Translation_Bot
Community Manager
Community Manager
Community Manager

@Relafe

感謝您發布您的發現,我們將研究並將此信息傳遞給我們的內部團隊。

最好的問候
普拉德普.

0
Translation_Bot
Community Manager
Community Manager
Community Manager

順便說一句,如果要重現這個問題,我認為如果有"標準爆炸發生器,那麼 4500 放鬆套件可以用"於此。

+ 3.3 伏特和 GND 都應通過 2N2/250 V/x7R 電容器連接到聚乙烯。

理想情況下,+3.3V 和 GND 應由外部電源供應器供電,並與兩條電線連接一起 EMC 共模脈衝器。

爆發以 + 極性套用,並以弱電容耦合引用 PE。 (由於使用的能量很少,0805 1Nf 25 或 50V 是足夠的。 另一方面,1pF 蓋應該更大,額定為 2k 到 5kV,顯然,否則它會破裂)

一個簡單(未經測試)的示意圖可以如下:

Relafe_1-1699260994539.png

使用按鈕 1 上的示波器,並使用 led1 作為"問題指示器,我認為"可能可以重現(led1 關閉,按鈕 1 輸入拉到 0V)。 請注意,+5.5kV 是我的發電機可以提供的最大值。 效果應該在較低的水平上明顯(大致,在 1pF 和 1+2.2nF 之間有一個電壓分隔器,但由於所有蓋子存在,這並不是一個確切的理論),但在更高的水平上,效果使其發生更快,所以應該更容易。

最好的問候,

休息

0