如同 STM32F103C8T6 與 CBT6 有著同樣的128K flash容量一樣, 市面上很多晶元, 同一系列的多個型號其實底下使用的是相同的硬體, 只是通過軟體, 晶元ID, 某些隱藏寄存器(例如AIR32F103)或者物理熔斷對容量進行限制. 讓我們看一看 PY32F002AF15P 這顆... ...
目錄
- 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU簡介
- 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode開發環境
- 普冉PY32系列(三) PY32F002A資源實測 - 這個型號不簡單
如同 STM32F103C8T6 與 CBT6 有著同樣的128K flash容量一樣, 市面上很多晶元, 同一系列的多個型號其實底下使用的是相同的硬體, 只是通過軟體, 晶元ID, 某些隱藏寄存器(例如AIR32F103)或者物理熔斷對容量進行限制. 讓我們看一看 PY32F002AF15P 這顆標稱 20K Flash, 3K RAM 的晶元還隱藏著哪些資源.
聲明
任何在廠家數據手冊之外的資源都是無保證的, 本文的內容僅對當前測試中使用的樣品有效, 請勿以此作為選型參考, 一切以廠家手冊為準. 因此產生的任何問題本人概不負責.
PY32F002A 的 RAM
當前樣品的型號是 PY32F002AF15P, TSSOP20封裝, 因為記憶體容量的檢測只涉及代碼修改, 對這片 PY32F002AF15P 進行了記憶體可用容量的測試
- 修改ld文件, 將記憶體設為 4KB, 寫入成功, 讀取成功
- 修改ld文件, 將記憶體設為 5KB, 無法啟動
- 修改ld文件, 將記憶體設為 4196, 無法啟動
實際上直接可用的記憶體為 4KB
PY32F002A 的 Flash
測試用的是 JLink, 修改 Flash 容量涉及到 Device 文件的修改, 首先修改 /opt/SEGGER/JLink/JLinkDevices.xml, 將 PY32F002AX5 的配置調整為32K Flash, 4K RAM
<Device>
<ChipInfo Vendor="Puya" Name="PY32F002AX5" WorkRAMAddr="0x20000000" WorkRAMSize="0x1000" Core="JLINK_CORE_CORTEX_M0"/>
<FlashBankInfo Name="Flash_32K" BaseAddr="0x08000000" MaxSize="0x8000" Loader="Devices/Puya/PY32F0xx_32.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
</Device>
然後修改ld文件, 將flash也設為32K
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 4K
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 32K
}
在代碼中構造一個巨大的數組將 32K 填滿, 從末尾開始列印, 編譯燒錄
32K容量, 寫入讀取成功
再改為48K, 寫入失敗, 讀取也失敗
實際直接可用的Flash容量為 32KB
PY32F002A 的運行頻率
因為 PY32F002A 的庫函數將最高頻率限制在了24MHz, 而 PY32F003 沒有PLL, HSI最高也只有24MHz, 既然 PY32F002A 可以使用 32K Flash + 4K RAM, 就直接將庫參數修改為了 PY32F030Fx6. 將運行頻率設為16MHz, 同時開啟 PLL.
結果運行正常. 此時系統頻率為 32MHz.
進一步將 HSI 設為 24MHz, 保持 PLL 開啟, 也運行正常, 此時系統頻率為 48MHz.
clk:48000000 flash:96 ram:de 8c 96␍␊
clk:48000000 flash:8c ram:8c 96 8c␍␊
clk:48000000 flash:64 ram:96 8c 64␍␊
clk:48000000 flash:4e ram:8c 64 4e␍␊
clk:48000000 flash:63 ram:64 4e 63␍␊
clk:48000000 flash:e6 ram:4e 63 e6␍␊
運行半小時, 沒有任何問題.
可見當前這片 PY32F002AF15P 支持PLL, 實際直接可用的系統內置時鐘為 48MHz, 如果使用外置晶振, 頻率也許能更高
PY32F002A 測試DMA
運行SDK中 PY32F003 的 ADC_ContinousConversion_DMA 示例代碼, 可以正常運行
當前這片 PY32F002AF15P 支持DMA
測試代碼
測試RAM, Flash 和 PLL 的代碼已經放到 GitHub, 地址
https://github.com/IOsetting/py32f0-template/tree/main/Examples/Raw/Test/PY32F002A_32KF_4KR
結論
到這裡, 這顆 PY32F002AF15P 是哪個型號的馬甲已經有點眉目, 進一步可以繼續校驗其它幾個關鍵外設: SPI2, LED.
待後續補充