普冉PY32系列(三) PY32F002A資源實測 - 這個型號不簡單

来源:https://www.cnblogs.com/milton/archive/2023/01/15/17052963.html
-Advertisement-
Play Games

如同 STM32F103C8T6 與 CBT6 有著同樣的128K flash容量一樣, 市面上很多晶元, 同一系列的多個型號其實底下使用的是相同的硬體, 只是通過軟體, 晶元ID, 某些隱藏寄存器(例如AIR32F103)或者物理熔斷對容量進行限制. 讓我們看一看 PY32F002AF15P 這顆... ...


目錄

如同 STM32F103C8T6 與 CBT6 有著同樣的128K flash容量一樣, 市面上很多晶元, 同一系列的多個型號其實底下使用的是相同的硬體, 只是通過軟體, 晶元ID, 某些隱藏寄存器(例如AIR32F103)或者物理熔斷對容量進行限制. 讓我們看一看 PY32F002AF15P 這顆標稱 20K Flash, 3K RAM 的晶元還隱藏著哪些資源.

聲明

任何在廠家數據手冊之外的資源都是無保證的, 本文的內容僅對當前測試中使用的樣品有效, 請勿以此作為選型參考, 一切以廠家手冊為準. 因此產生的任何問題本人概不負責.

PY32F002AF15P

PY32F002A 的 RAM

當前樣品的型號是 PY32F002AF15P, TSSOP20封裝, 因為記憶體容量的檢測只涉及代碼修改, 對這片 PY32F002AF15P 進行了記憶體可用容量的測試

  1. 修改ld文件, 將記憶體設為 4KB, 寫入成功, 讀取成功
  2. 修改ld文件, 將記憶體設為 5KB, 無法啟動
  3. 修改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.

待後續補充


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • StringBuffer類 一、 結構剖析 Java.lang.StringBuffer 代表可變的字元序列,可以對字元串內容進行增刪。 很多方法與String相同,但StringBuffer是可變長度的。 StringBuffer是一個容器。 String VS StringBuffer Stri ...
  • 本文使用代碼 book_dict = {"price": 500, "bookName": "Python設計", "weight": "250g"} 第一種方式:使用[] book_dict["owner"] = "tyson" 說明:中括弧指定key,賦值一個value,key不存在,則是添加元 ...
  • 第二章 線程管控 主要內容: 啟動線程,並通過幾種方式為新線程指定運行代碼 等待線程完成和分離線程並運行 唯一識別一個線程 2.1 線程的基本管控 ​ main函數其本聲就是一個線程,在其中又可以啟動別的線程和設置其對應的函數入口。 2.1.1 發起線程 ​ 不管線程要執行的任務是複雜還是簡單,其最 ...
  • 作者:Hai Xiang 來源:https://www.cnblogs.com/haixiang/p/12867160.html 什麼是elasticsearch Elasticsearch 是一個開源的高度可擴展的全文搜索和分析引擎,擁有查詢近實時的超強性能。 大名鼎鼎的Lucene 搜索引擎被廣 ...
  • 1 簡介 GKE(Google Kubernetes Engine)是一個K8s平臺, 我們可以使用gcloud來創建GKE集群。在開始之前,可以查看:《初始化一個GCP項目並用gcloud訪問操作》。 2 創建GKE集群 2.1 打開API 在創建集群之前,需要打開Google API,不然無法操 ...
  • 前言 眾所周知記憶體緩存(MemoryCache)數據是從記憶體中獲取,性能表現上是最優的,但是記憶體緩存有一個缺點就是不支持分散式,數據在各個部署節點上各存一份,每份緩存的過期時間不一致,會導致幻讀等各種問題,所以我們實現分散式緩存通常會用上Redis 但如果在高併發的情況下讀取Redis的緩存,會進行 ...
  • 一般一個人的成長是分幾個階段的,具體如下: 1)剛開始參與開發階段:這個階段基礎不是很好,一邊學基礎,一邊做開發,剛開始的時候大家都是這樣,如果想快速的跳過這個階段,工具書與筆記(自己做的那種)就是速成方法了。大家一定要多辛苦敲代碼。 2)菜鳥階段:所謂菜鳥就是會做資料庫增刪改查,一般到了這個階段就 ...
  • 痞子衡嵌入式半月刊: 第 70 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...