2

GD32FFPRTGU6实验

 3 years ago
source link: https://zhuanlan.zhihu.com/p/348338626
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近几个月估计电子行业的朋友们都被疯狂涨价的芯片整惨了, 特别是STM32. 比如前几年的性价比之王: STM32F072C8和F072CB, 除了主频和RAM比F103C8/CB差点之外, 其他外设齐全, 48脚封装还多了2路DAC, 外设库也更好用些. 这货最便宜时只要六七块, 12月时居然涨到了80多元, 现在稍微降了一点也得40多.

某天偶尔搜到了这么一款芯片:

YVBJZzv.jpg!mobile

批量还不到10元, 性能呢? 一看吓一跳, M4核, 1M FLASH(不能当真, 实际上只有前256K可以放程序, 后面的就当赠品吧), 128K RAM, 标称主频168MHz. 看样子是GD32F4的缩水版, 据说是为指纹识别专门定制的.

这东西的Datasheet写得实在是不怎么样, 粗制滥造, 比如标称主频是168M但是在时钟树里还是120M; 管脚描述里有SPI0_IO2和SPI0_IO3, Datasheet里却没说有QSPI; 前面的功能表里没说有DAC, 管脚描述里也没有, 但后面却又多了一页DAC Characteristics. 到底有没有QSPI和DAC, 也得试了才知道. 不管怎么样, 先来两片试试, 到JLC做了两个类似Arduino Nano的小板, 加了16M晶振, 一片W25Qxx, AMS1117, 其他引脚能引出的引出, 完事.

(照片待补充)

等PCB到手, 焊好, 用STLINK连一下, 正常. 接着是找它的外设库, 先找了GD32F4XX的库, 结果这库里怎么只有Keil和IAR的启动代码, 没有GCC的? 我们GCC用户低人一等吗? 没办法, 把Keil的抄一遍, 照GCC格式改写一个吧. 然后写个串口输出Hello, world, 没想到怎么也不运行, 一上电就进HardFault了.

折腾半天还是不行, 网上再一搜, 发现原来这家伙不是用GD32F4XX的库啊, 得用F30X的. 好吧, 换成F30X的库, 再写一遍GCC的启动代码, 这次可以了, 串口读写一切正常.

下面先试验SPI, 一切顺利. 再试着启用QSPI, 改一下W25驱动, 把四线输出命令加上. 再读, 一切正常. 和普通SPI模式的速度对比一下, 四线方式大约快了20%, 估计是因为没有用上DMA. 加上DMA的话速度应该就是接近四倍了.

再试DAC, 这次不管怎么配置都没法在PA4管脚上得到0V或3.3V以外的电压了, 看样子就是没有, 算了吧.

最后试试这东西的超频潜力, 之前看到有人说GD32F450可以超到250MHz, 不知道这小东西行不行. 开始, 把CKOUT脚设置为输出PLL/2, 用示波器监视波形, 把PLL设置到200M, 一切正常; 240M, 正常; 280M, 正常; 320M, 正常; 360M, 不运行了. 继续细调, 确定这东西的超频极限在336M左右, 正好是标称频率的两倍. (频率再高时可能需要把APB1和APB2时钟分频加大, 不然串口外设受不了.)

能不能再往上超点呢? 把AHB二分频试试. (这样其实意义不大, 包括CPU核心在内的所有外设都是在AHB基础上分频的.) 频率继续往上, 360M正常, 400M正常, 440M正常, 480M正常, 520M正常, 560M正常, 600M不运行了. 细调确定576M可以运行但是一碰就死机, 560M可以稳定运行很久.

3QZjamQ.jpg!mobile

上图是560M时从CKOUT脚输出二分频280M的波形. (示波器显示的93.4MHz不对, 数格子可以算出频率是280M.)

总之, 看样子这东西在AHB不分频时, 在280M运行应该是没太大问题的. 可惜的是USB时钟只支持最高从主时钟4分频, 这样如果想用USB, 最高主频只能是48M*4=192M.

手里还有之前自制的两块GD32F350CB开发板, 这东西标称主频是108M, 是不是也有类似的潜力呢? 也得试一下. 结果和GD32FFPRTGU6类似, AHB不分频时320M正常, 360M不运行; AHB二分频后400M正常, 440M串口乱码了, 估计是PLL状态不太对了, 但看CKOUT波形基本正常, 偶尔会乱跳一下. 继续往上, 480M, 520M, 560M都正常, 再试600M不行了. 然后再给它降频, …这次悲剧了, 怎么也连不上了, 估计是烧了.

换上另一块板, 400M运行, 一切正常. 总之感觉它的超频潜力应该和GD32FFPRTGU6差不多, 全速280M问题不大. 但是它的USB时钟只支持从主时钟3.5分频, 这样用USB时的最高主频就只有48M*3.5=168M了.

做完这几组实验再用STM32, 顿时有种 “回不去了”的感觉. 以后看来可以把手里的项目逐渐都改成用GD32了.

最后再补充一下, 这两天刚发现又新出了GD32E5xx, 标称主频180M, 主要的亮点一是全系标配了高分辨率定时器SHRTM, 估计和STM32F334的HRTIM类似, 用可编程1/32延迟来提高分辨率. 这货因为主频高, SHRTM的等效时钟可以达到180M*2*32=11.52GHz, 用来做开关电源和电机控制之类应该非常舒服了. 二是全系标配2路DAC, 不用多说了. 三是终于增加了QSPI SRAM的地址映射方式读写, 如下图.

MJrQFjz.jpg!mobile

对了, 改叫SQPI了, 不知道是否增加了四线命令方式? 这回可以不太为RAM发愁了, 布线又比并行SRAM或SDRAM之类省事太多, 只是目前SPI SRAM最大容量似乎还只有64Mbit / 8MB. 以及GD32E5系列也增加了两个用于指纹识别的小兄弟, GD32EPRTRDT6和GD32EPRTVDT6. 这俩比起E5xx少了HRTIM, 但是直接在片内集成了4MB容量的PSRAM, 也很实惠了.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK