W80x的GPIO速度很慢问题

发布于 2022-08-10 16:26:48

W80x的主频速度很高,用来连接彩屏,刷屏显示应该是绰绰有余,但是实际测试发现刷屏速度很慢。使用8BIT并口刷屏,实际测下来不如主频跑在48MHz的STM32F030F6刷屏速度快!!!遂展开细究!
测试硬件如下:
IMG_20220810_153532.jpg

焊接的W801芯片,但是使用W806的裸机SDK工程测试,目的是避免W801SDK工程的RTOS和中断等功能影响测试准确性。
只测试全屏清空,屏幕分辨率为240*432,8080并口,刷屏数据为RGB565,写两次8bit为一个像素点。

经过特殊优化后的LCD刷屏核心代码和编译后汇编如下:
注意,为避免误差,优化后,每一个指令读书写GPIO寄存器!!!没有多余操作!!
一个for循环内有8个紧密相连的ST.W指令,全是单周期操作GPIO!!和一个循环跳转指令BNEZ!!相比于正常的GPIO操作,“读ld.w--改bseti/bclri--写st.w”,没有别的多余的“读--改”步骤,只有“写”步骤,从理论上杜绝是因为代码写的稀烂导致的刷屏速度慢!也方便后续速度测试
1.JPG

理论计算:以上述指令ST.W均为单周期,跳转指令BNEZ因为要清流水线视为3个周期,写一个像素算10个CPU时钟,以下简称10T。
写240*432像素需要1036800T
在主频跑240MHz情况下,显示一屏需要的时间是4.32ms,也就是可以刷231.5帧/秒(暂时不考虑屏幕受不受得了)
实测,以240MHz主频刷屏,写一屏耗时33.6ms,慢了一个数量级,只有30帧的速度我不能接收,肉眼可见的明显拉窗帘现象!!!实际测主频跑在48MHz的STM32F030F6刷屏速度都可以接近50帧!
测试将W801主频降低到80MHz,此处发现了猫腻,写一屏耗时36.4ms,只是稍微增加?
IMG_20220805_170158.jpg
刷屏速度没有变慢三倍。这里发现了猫腻。应该是GPIO速度和CPU时钟速度不匹配。
因为手上逻辑分析仪性能不足以测量IO翻转速度,特意借用了10Gsps的示波器测试。
测量数据位引脚的波形:写一个像素时间位360ns,也就是10T的用时,理论上10T用时应该是41ns左右
IMG_20220805_170009.jpg
测量WR引脚的波形:这两个时钟之间的间隔在汇编上就表现为:
GPIOB->DATA = gpiob_cache_clr;
8011d6a: dda32000 st.w r13, (r3, 0x0)
GPIOB->DATA = gpiob_cache_set;
8011d6e: dd832000 st.w
这里很明显的发现,GPIO时钟只有20MHZ????????
20MHz开什么天才国际大玩笑的设计????!!!?这可是主频240MHz的处理器哎!!!!怎么说也得给个50MHz好吧??????
IMG_20220805_171311.jpg
根据手册猜测,而且CPU在访问GPIO为啥的时候应该是AHB-AHB2-APB的路径,写入GPIO操作后类似于总线忙,CPU一直在死等,这就造成了20MHz这种情况的奇观。
2.JPG

刷个屏幕拉窗帘不能接受,为了能提速,反复阅读了写的是中文但是不知道写的是啥的手册的CLK部分,明白APB时钟居然受控于WLAN根时钟管理???莫名其妙+1
3.JPG
4.JPG
"如果希望 WLAN 系统正常工作,WLAN 根时钟需要保持在 160MHz",二级总线时钟及 APB 时钟为此时钟四分频,这里再2分频就是GPIO时钟的20MHz
将wlan根时钟从原本的480MHz/3=160MHz调整到2分频 240MHz。
4cea8d832acb6b1577b34d5f95e950f6.jpg
这样GPIO的速度就上来了,有30MHz了,如图单周期执行33ns:
IMG_20220805_182233.jpg
刷屏时间来到22.5ms,这个速度有40多帧,总算不拉窗帘了
IMG_20220805_182145.jpg

现在问题来了:这样直接超WLAN根时钟,wifi功能肯定不能用了。
官方有办法解决吗?或者是开放一些时钟分频的配置寄存器,让APB和AHB2不是绑定四分之一时钟关系。
可否保留wifi功能支持的情况下,提高GPIO的速度。
主频240MHz的单片机刷个屏幕还这么拉跨说出去多丢人啊。。。
你说别人程序写的烂刷屏慢可以怪用户不会用,这问题如果官方不给出方案或者开发隐藏寄存器,换个神仙用户也优化不了哦,总不能给你一个时钟周期挤一挤变成两条操作用了吧?

查看更多

关注者
0
被浏览
15.6k
ZYQ
ZYQ 2022-08-10
我已不再支持W80X任何相关问题的回复,请大家不要私信,有问题找 isme 谢谢

这个实际基本上就是这样子的,没有所谓的隐藏寄存器的。AHB to AHB bridge 桥为了协调后级低速设备而这样做的。最好使用开发板进行前期验证比较合适的

4 个回答
wyl_wyl
wyl_wyl 2022-08-12
这家伙很懒,什么也没写!

这。。。我还本来准备搞个板子驱动480*320的屏幕呢,如果是这个效果的话,真是不敢用了

hjyben
hjyben 2023-05-12
这家伙很懒,什么也没写!

请问是怎样把wlan根时钟调整成2分频的,我设置成2分频后程序会卡死a13d1614a3814d400831ec1336352d85.png
或异常报错,我也是使用W806的裸机SDK工程。

小学生
小学生 2023-11-05
我是小学生

我这个使用eeprom保存都会卡死

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览