数码之家

 找回密码
 立即注册
搜索
查看: 7829|回复: 38

[ARM] 避坑指南-国产wifi蓝牙芯片W800/W801/W806的GPIO速度很慢

[复制链接]
发表于 2022-8-15 11:21:31 | 显示全部楼层 |阅读模式
W80x的主频速度很高,价格也很香,用来连接彩屏,刷屏显示应该是绰绰有余,弄个带屏幕的小玩意做智能家居控制/天气显示站/电脑占用显示之类的应该很好玩,但是实际测试发现刷屏速度很慢。使用8BIT并口刷屏,实际测下来不如主频跑在48MHz的STM32F030F6刷屏速度快!!!遂展开细究!
测试硬件如下:

焊接的W801芯片,但是使用W806的裸机SDK工程测试,目的是避免W801SDK工程的RTOS和中断等功能影响测试准确性。
只测试全屏清空,屏幕分辨率为240*432,8080并口,刷屏数据为RGB565,写两次8bit为一个像素点。经过特殊优化后的LCD刷屏核心代码和编译后汇编如下:(防喷预警:“用户自己不会用怪芯片烂”)
注意,为避免误差,优化后,每一个指令读书写GPIO寄存器!!!没有多余操作!!
一个for循环内有6个紧密相连的ST.W指令,全是单周期操作GPIO!!和一个循环跳转指令BNEZ!!相比于正常的GPIO操作,“读ld.w--改bseti/bclri--写st.w”,没有别的多余的“读--改”步骤,只有“写”步骤,从理论上杜绝是因为代码写的稀烂导致的刷屏速度慢!也方便后续速度测试
左:汇编 右:C程序


理论计算:以上述指令ST.W均为单周期,跳转指令BNEZ因为要清流水线视为3个周期,写一个像素算9个CPU时钟,以下简称9T。
写240*432像素需要1036800T
在主频跑240MHz情况下,显示一屏需要的时间是3.888ms,也就是可以刷257帧/秒(暂时不考虑屏幕受不受得了)
实测,以240MHz主频刷屏,写一屏耗时33.6ms,慢了一个数量级,只有30帧的速度我不能接受,肉眼可见的明显拉窗帘现象!!!实际测主频跑在48MHz的乞丐CM0芯片STM32F030F6刷屏速度都可以接近50帧!
测试将W801主频降低到80MHz,此处发现了猫腻,写一屏耗时36.4ms,只是稍微增加?

刷屏速度没有变慢三倍。这里发现了猫腻。应该是GPIO速度和CPU时钟速度不匹配。
因为手上是20几块钱的逻辑分析仪性能不足以测量IO翻转速度,找人借用了一个10Gsps的示波器测试。
测量数据位引脚的波形:实际9T写一个像素时间位360ns,理论上9T用时应该是41ns左右

测量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好吧??????


根据手册猜测,而且CPU在访问GPIO的时候应该是AHB-AHB2-APB的路径,写入GPIO操作后类似于总线忙,CPU一直在死等,这就造成了20MHz这种情况的奇观。

刷个屏幕拉窗帘不能接受,为了能提速,反复阅读了写的是中文但是不知道写的是啥,看起来比看英文费劲的手册的CLK部分,明白APB时钟居然受控于WLAN根时钟管理???莫名其妙+1


"如果希望 WLAN 系统正常工作,WLAN 根时钟需要保持在 160MHz",二级总线时钟及 APB 时钟为此时钟四分频,这里再2分频就是GPIO时钟的20MHz
将wlan根时钟从原本的480MHz/3=160MHz调整到2分频 240MHz。

这样GPIO的速度就上来了,有30MHz了,如图单周期执行33ns:

刷屏时间来到22.5ms,这个速度有40多帧,总算不拉窗帘了

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

总结:玩国产芯片要先测试好在画板,再计划想要玩什么。不然总会在莫名其妙的地方被坑到怀疑人生



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 10家元 +189 收起 理由
kkdkj + 20 謝謝分享
stdzlqz + 20
玛德陛下 + 20 認真發帖
网络孤客 + 20 優秀文章,避坑!
kaixi_ants + 20
mousebat04 + 5 大佬牛飞飞
飞向狙沙 + 20 優秀文章
jf201006 + 20 優秀文章
jpdd521 + 20 坑坑更健康。。
饭堂大妈 + 24 優秀文章

查看全部打赏

发表于 2022-8-15 11:30:49 | 显示全部楼层
挖坑看到过
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-15 11:55:29 | 显示全部楼层
略坑略坑

ESP32也是有点, 比如用 WIFI 的时候就不能用 ADC2, 一些外设打开的时候 GPIO36 GPIO39 会被拉低几十 ns...

虽然有勘误手册, 但非专业用户常常也是先被坑了才会去找,因为在用户看来这完全是风马牛不相及的功能。
回复 支持 反对

使用道具 举报

发表于 2022-8-15 12:08:12 来自手机浏览器 | 显示全部楼层
我用8266刷2.4寸7789屏感觉跟89c52差不多…
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-15 12:08:21 | 显示全部楼层
lxvtag 发表于 2022-8-15 11:55
略坑略坑

ESP32也是有点, 比如用 WIFI 的时候就不能用 ADC2, 一些外设打开的时候 GPIO36 GPIO39  ...

也是很坑哎,这些国产篇没一个省心
回复 支持 反对

使用道具 举报

发表于 2022-8-15 12:10:53 | 显示全部楼层
W801 我买了好多块,

在一些论坛早看到 外设慢,  果断弃坑,连LED都没来得及点.

一百块泡汤..
回复 支持 反对

使用道具 举报

发表于 2022-8-15 12:31:06 | 显示全部楼层
坑坑更健康。。
回复 支持 反对

使用道具 举报

发表于 2022-8-15 14:29:24 | 显示全部楼层
大脑:坐稳了,爷要飙车了
四肢:我还没上车呢,等等我
回复 支持 3 反对 0

使用道具 举报

发表于 2022-8-15 17:59:08 | 显示全部楼层
手册里不是说不让超过160MHz么?你怎么敢超频?
回复 支持 反对

使用道具 举报

发表于 2022-8-16 08:03:42 来自手机浏览器 | 显示全部楼层
联盛德w800系列就算了吧,谁用坑谁。
回复 支持 反对

使用道具 举报

发表于 2022-8-16 09:25:13 | 显示全部楼层
2545889167 发表于 2022-8-15 12:08
也是很坑哎,这些国产篇没一个省心

台产芯片中文手册要靠谱些
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-17 05:11:10 来自手机浏览器 | 显示全部楼层
99520 发表于 2022-8-16 08:03
联盛德w800系列就算了吧,谁用坑谁。

能说说具体还有什么坑吗
回复 支持 反对

使用道具 举报

发表于 2022-8-17 15:57:44 来自手机浏览器 | 显示全部楼层
我也买了好些片。冲着高主频去了。
不过,现在的价格还行。
回复 支持 反对

使用道具 举报

发表于 2022-8-17 17:13:19 来自手机浏览器 | 显示全部楼层
应该感谢楼主踩坑
回复 支持 反对

使用道具 举报

发表于 2022-8-17 20:23:21 来自手机浏览器 | 显示全部楼层
或许gpio时钟没开大,用寄存器方式驱动看看
回复 支持 反对

使用道具 举报

发表于 2022-8-17 23:36:49 | 显示全部楼层
当年用控制器,也是被不知道啥的中文翻译坑死,最后查原版英文手册,发现中文的数字错了
回复 支持 反对

使用道具 举报

发表于 2022-8-18 08:14:59 | 显示全部楼层
你们这好歹还是器件的PDF文件,我还见过最近三线主板商译成中文的BIOS界面,进去后看不明白,没办法先改成英文,才搞定的。并非我装的,真的看不懂这个中文的BIOS参数名称。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-18 11:56:29 | 显示全部楼层
mckk520 发表于 2022-8-17 20:23
或许gpio时钟没开大,用寄存器方式驱动看看

手册上没有相关的寄存器哦,要么是没有,要么是厂家没开放
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-18 11:57:07 | 显示全部楼层
dgpower 发表于 2022-8-17 23:36
当年用控制器,也是被不知道啥的中文翻译坑死,最后查原版英文手册,发现中文的数字错了 ...

这个本来就是个国产芯片的手册。只是厂家的人不知道怎么的,连中文也讲不利索罢了
回复 支持 反对

使用道具 举报

发表于 2022-8-20 22:16:54 | 显示全部楼层
2545889167 发表于 2022-8-18 11:57
这个本来就是个国产芯片的手册。只是厂家的人不知道怎么的,连中文也讲不利索罢了 ...

就算是技术大咖,不见得就是好老师
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-3 06:41 , Processed in 0.140400 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表