Padauk是一家臺灣超低成本微控制器供應商,以“3分錢MCU”而聞名。供應商本身僅提供具有專有C風格語言的封閉工具鏈。與此同時,部分基于逆向工程的開源且獨立創建的工具鏈已經可用。
仍有一些領域尚未完全了解。其中一個主題是I/O寄存器的初始狀態。真實設備的行為與數據表有些不一致,這可能是由于勘誤表或專有和開放工具鏈的不同行為造成的。
為了詳細研究PadaukPFS173-S16上的這種行為,我們使用了一個小程序在啟動后直接將整個I/O空間復制到RAM。由于不可能對I/O寄存器進行索引訪問,因此必須生成單獨的指令來復制每個地址。
MCU外設正確初始化后,I/O區域備份將通過串行端口轉儲。
上圖顯示了復位后整個I/O區域的轉儲。有128個可能的寄存器,但只有其中一些被使用和記錄-只有少數寄存器實際上顯示非零值。
一個有趣的方面是某些值是重復的,例如地址00和01中的0xF0。這一點特別引人注目,因為0x01處的寄存器實際上未使用。更多的實驗表明,實際上最后訪問寄存器的內容是重復的。該行為看起來非常像浮動內部總線-如果訪問的寄存器不存在,則不會將新信息寫入總線;由于寄生電容,上次訪問的邏輯電平被存儲。當然,如果這是一個安全關鍵設備,這將是一個很好的側通道。但我們仍然可以利用這種效應來識別哪些I/O尋址被實際利用,哪些未被利用。
為了探測未使用的寄存器,我只是在I/O讀取之前直接將0x55寫入已知寄存器。如果下一次讀取訪問是針對未使用的I/O位置,則它將讀取為0x55并且可以輕松識別。正如您在上圖中看到的,許多I/O地址現在讀取的是0x55,因此未使用或只可寫入。大多數使用的寄存器都可以輕松地與文檔進行交叉檢查。
然而,有一些寄存器無法分配。第一個,在0x23處標記為紅色,另一組在0x2d、0x2e、02f處標記為綠色。進一步探測發現0x2d顯然是一個控制寄存器。復位狀態為0xE0。位7-5、3、1、2為R/W,位4和2為RO或WO。0x2e和0x2f似乎是只讀的。
JS在EVBlog-Forum中的一些出色的調查揭示了對綠色寄存器的一個非常有趣的解釋:似乎早期的padauk微控制器包含一個稱為電阻頻率轉換器(RFC)的外設,仍然可以在舊數據表版本中找到它經銷商。這些寄存器的位配置與結果完全一致,因此匹配的可能性很大。
目前尚不清楚為什么該外圍設備沒有記錄。Padauk的目錄中仍然提到了它,但沒有列出具有此功能集的任何設備。
未記錄的寄存器0x23(紅色)的用途很容易識別:它實際上包含ADC的附加LSB。Padauk似乎有一個用于11位ADC的標準IP模塊,該模塊也用于PFS173。由于某種原因,它被聲明為8位ADC,而低三位未記錄。可能存在噪音問題?