普冉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
  • @ 先看一下導出的整體效果(如下圖),其中標註的區域都是通過後臺動態生成的: 一、先在Word中建立好表格模板 1.1、參數創建方法(Word和WPS) 1.1.1、Office中Word域的創建 1.1.1.1、選中指定的單元格 -> 點擊頭部工具欄中的”插入“ -> 選擇 ”文檔部件“ -> 選 ...
  • 在實際工作中,經常會有一些需要定時操作的業務,如:定時發郵件,定時統計信息等內容,那麼如何實現才能使得我們的項目整齊劃一呢?本文通過一些簡單的小例子,簡述在.Net6+Quartz實現定時任務的一些基本操作,及相關知識介紹,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 紙殼CMS支持將評論、留言、表單提交、訂閱等通知,通過WebHook發送到第三方平臺,比如釘釘。 創建釘釘WebHook 需要在釘釘群中創建自定義機器人,具體方法可以參考釘釘的官方文檔: 自定義機器人接入 需要註意的是,在安全設置中不要使用加簽,使用自定義關鍵字即可。在發送的消息中,只要包含這個關鍵 ...
  • 向下轉型的使用 Java的多態性: 父類指向子類的聲明 Animal animal = new Dog()//Dog()重寫了父類Animal 有了對象的多態性以後,記憶體實際上載入的是==子類==的屬性和方法,但是由於變數聲明為==父類類型==,導致編譯時只能調用父類的屬性和方法,子類特有的屬性方法 ...
  • spring源碼環境搭建 組件 版本 jdk 1.8.0_192 spring-framework 5.3.x gradle 7.5.1 idea 2022.3.3 aspectJ 1.9 可根據spring-framwork項目說明靈活選擇 一、拉取spring-framework項目 1、spr ...
  • 首先任何的商業邏輯,光流量增長,沒法變現是沒用的。 就像博客群發提效工具,得有對應的用戶,更得有對應付費用戶群體的畫像。剩下的就是靠增長,被動讓他們找到你的產品,用產品解決他們痛點,他們自然而然會付費。 下麵大致分享下從三個方向分享下: 用戶痛點 -> 真正的付費用戶群體 產品價值 PLG 增長 一 ...
  • Object類的使用 Object類 Object類中的方法可以在網上搜索得到 Object類是所有java類的父類 如果類在聲明中未使用extends關鍵字指明其父類,則預設父類為java.lang.Object類 Object類中的功能(屬性、方法)具有通用性。 屬性:無 方法:equals() ...
  • Qt 源碼分析之moveToThread 這一次,我們來看Qt中關於將一個QObject對象移動至一個線程的函數moveToThread Qt使用線程的基本方法 首先,我們簡單的介紹一下在Qt中使用多線程的幾種方法: 重寫QThread的run函數,將要在多線程執行的任務放到run函數里 /*myt ...
  • 包裝類的使用 包裝類的使用 java提供8種基本數據類型對應的包裝類,使得基本數據類型變數具有類的特征 掌握:==基本數據類型、包裝類、String==三者之間的互相轉換 自動裝箱與自動拆箱==[基本數據類型和包裝類的轉換]== JDK5.0新特性,自動裝箱與自動拆箱。 class Test{ pu ...
  • 本文已經收錄到Github倉庫,該倉庫包含電腦基礎、Java基礎、多線程、JVM、資料庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散式、微服務、設計模式、架構、校招社招分享等核心知識點,歡迎star~ Github地址 大家好,我是大彬~ 今天來聊聊接 ...