OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8968|回复: 14

探索者F4开发板 摄像头实验/照相机实验/综合实验 使用9320、9325等LCD不能正常显示的bug解决方法

[复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2015-1-8 18:16:50 | 显示全部楼层 |阅读模式
今天遇到一个探索者客户用9320的LCD液晶模块,使用OV2640摄像头的时候,出现条纹状显示。
画了半个下午找到了这个问题点,是探索者程序的bug。
问题现象:综合实验,进入照相机功能后,出现横条纹,并不出现完整的画面。
问题原因:因为探索者开发板兼容了N多LCD型号,有些LCD写入比较慢,故将部分LCD的写入速度放慢了,统一用54ns,但是实际上
摄像头输出的数据流比较快,用54ns会导致写入LCD的速度,更不上摄像头的输出速度,因此出现数据混叠/丢失,形成横条纹画面。
解决办法:LCD_Init函数里面,有如下代码:
[mw_shl_code=c,true] //写时序控制寄存器 FSMC_Bank1E->BWTR[6]|=0<<28; //模式A FSMC_Bank1E->BWTR[6]|=9<<0; //地址建立时间(ADDSET)为9个HCLK=54ns //9个HCLK(HCLK=168M),某些液晶驱动IC的写信号脉宽,最少也得50ns。 FSMC_Bank1E->BWTR[6]|=8<<8; //数据保存时间(DATAST)为6ns*9个HCLK=54ns[/mw_shl_code]
9,和8,两个参数,控制着LCD的写入速度。54ns太慢了。
修改为6和5,这样写入速度为36ns,可以满足摄像头正常显示需求。
修改后代码如下:
[mw_shl_code=c,true] //写时序控制寄存器 FSMC_Bank1E->BWTR[6]|=0<<28; //模式A FSMC_Bank1E->BWTR[6]|=6<<0; //地址建立时间(ADDSET)为9个HCLK=54ns //9个HCLK(HCLK=168M),某些液晶驱动IC的写信号脉宽,最少也得50ns。 FSMC_Bank1E->BWTR[6]|=5<<8; //数据保存时间(DATAST)为6ns*9个HCLK=54ns[/mw_shl_code]
经过这样的修改后,9320、9325,1505,C505等一批LCD都可以正常显示了。
对于个别LCD,比如6804/C505,还需要将LCD_Init函数,另外一段代码也做修改,如下:
[mw_shl_code=c,true] }else if(lcddev.id==0X6804||lcddev.id==0XC505) //6804/C505速度上不去,得降低 { //重新配置写时序控制寄存器的时序 FSMC_Bank1E->BWTR[6]&=~(0XF<<0);//地址建立时间(ADDSET)清零 FSMC_Bank1E->BWTR[6]&=~(0XF<<8);//数据保存时间清零 FSMC_Bank1E->BWTR[6]|=6<<0; //地址建立时间(ADDSET)为10个HCLK =60ns FSMC_Bank1E->BWTR[6]|=5<<8; //数据保存时间(DATAST)为6ns*13个HCLK=78ns }[/mw_shl_code]
至此,本bug修正完成。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2014-1-27
在线时间
75 小时
发表于 2015-1-8 18:20:37 | 显示全部楼层
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-1-6
在线时间
1 小时
发表于 2015-1-9 09:08:18 | 显示全部楼层
那个客户就是我啦,谢谢原子老大!
我之前淘了个103战舰的二手开发板,上面有块2.8寸的屏。前几天买F4就没买屏。测试时显示好好的,到摄像头那块就花了。中间过程不细表,反正是揪住原子老大不放,折磨了一下午终于找到这个bug。虽然旺旺名写有“技术支持--正点原子",开始我不太相信旺旺那头是他本人,最后搞定了我就信了
中间碰到的问题总结一下供大家参考,以免碰到类似的问题,也不白费两个人一下午的功夫:
1.屏幕上是这样的:


BMP截图跟这一样,JPEG截图是好的。因为BMP截图是读的是LCD显存数据,JPEG是采到内存里再保存的。

2.原子的公司已经停用9320的2.8寸屏,新配的都是9341的屏,在9341上测试没有问题。

3.我用逻辑分析仪抓液晶的片选信号,发现写给液晶的数据少于320x240。横屏竖屏都测了,得到128x320, 160x240, 303x236之类奇怪的结果。数脉冲的结果有误差,但不至于差这么大。

4.折腾未果,一度怀疑是OV2640模块坏了,准备发回测试。

5.原子老大翻出一块9320的旧屏测试,复现了花屏现像,确定是软件bug。最后终于找到问题。

6.悲剧是我的屏加快总线速度就白屏,减慢速度DMA就花屏。 最后还是订购一片新的2.8寸屏,一片4.3寸屏,正好现在还有优惠。

总结经验:
1.摄像头用DMA直接将采集的数据转发到LCD的数据口,这样必须保证摄像头输出格式与LCD显存格式、分辩率一致。
2.DMA的速度受总线速度限制。
3.如果屏的速度跟不上,只有先DMA到内存,再写到屏上。

再次向原子老大还有另一位技术支持和销售表示感谢!
回复 支持 反对

使用道具 举报

0

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2013-8-25
在线时间
12 小时
发表于 2015-1-9 10:06:43 | 显示全部楼层
解决问题和探究原因的精神令人钦佩
哪个公司不需要这样的人呢
————————
回复 支持 反对

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-1-9 10:23:27 | 显示全部楼层
呃,涨姿势了。不过,我喜欢用宏定义条件编译。
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

8

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-12-27
在线时间
15 小时
发表于 2015-1-9 13:42:00 | 显示全部楼层
我这里买的一块板子wm8978没有声音输出,用您的MP3例程测试的,音乐文件都找了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
 楼主| 发表于 2015-1-9 18:35:36 | 显示全部楼层
回复【6楼】zzz1223887687:
---------------------------------
请旺旺联系我们
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-1-16
在线时间
4 小时
发表于 2015-1-16 16:10:07 | 显示全部楼层
mark    跟你一样
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-11-27
在线时间
3 小时
发表于 2015-1-19 16:03:03 | 显示全部楼层
学习~ 赞一个
记忆如此美好,值得灵魂为之粉身碎骨。
回复 支持 反对

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5137
金钱
5137
注册时间
2014-8-26
在线时间
1316 小时
发表于 2015-7-13 21:57:45 | 显示全部楼层
此部分代码支持9320,9328,9325,b505,1505,5408,4535,9341,1505,4531,5510,5310
修改如下
[mw_shl_code=c,true] FSMC_Bank1E->BWTR[6]|=0<<28; //模式A FSMC_Bank1E->BWTR[6]|=7<<0; //地址建立时间(ADDSET)为9个HCLK=54ns //9个HCLK(HCLK=168M),某些液晶驱动IC的写信号脉宽,最少也得50ns。 FSMC_Bank1E->BWTR[6]|=6<<8; //数据保存时间(DATAST)为6ns*9个HCLK=54ns [/mw_shl_code]


实验42 照相机实验.rar

1.12 MB, 下载次数: 1186

实验35 摄像头实验.rar

2.02 MB, 下载次数: 2740

回复 支持 反对

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-11-21
在线时间
9 小时
发表于 2015-7-13 23:10:52 | 显示全部楼层
照相机实验。。
回复 支持 反对

使用道具 举报

0

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2012-11-11
在线时间
6 小时
发表于 2015-7-14 15:25:08 | 显示全部楼层
Mark一下。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
 楼主| 发表于 2015-8-2 12:17:38 | 显示全部楼层
另外, 有68042的朋友,会出现花屏,我们将LCD_Init里面的初始化代码,事件参数稍作修改,即可支持6804 ID的LCD,代码如下:
[mw_shl_code=c,true] }else if(lcddev.id==0X6804||lcddev.id==0XC505) //6804/C505速度上不去,得降低 { //重新配置写时序控制寄存器的时序 FSMC_Bank1E->BWTR[6]&=~(0XF<<0);//地址建立时间(ADDSET)清零 FSMC_Bank1E->BWTR[6]&=~(0XF<<8);//数据保存时间清零 FSMC_Bank1E->BWTR[6]|=3<<0; //地址建立时间(ADDSET)为10个HCLK =60ns FSMC_Bank1E->BWTR[6]|=2<<8; //数据保存时间(DATAST)为6ns*13个HCLK=78ns }[/mw_shl_code]

实验42 照相机实验_6804.rar

1001.51 KB, 下载次数: 1100

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2013-10-22
在线时间
15 小时
发表于 2015-8-2 21:16:50 | 显示全部楼层
谢谢原子哥,,,,,先看看,,,
回复 支持 反对

使用道具 举报

7

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
702
金钱
702
注册时间
2016-2-6
在线时间
85 小时
发表于 2016-3-21 22:28:21 | 显示全部楼层
伟大的原子哥 9431的屏幕咋办?
记忆是靠不住的,它经不起时光的腐蚀,到最后残留的那些一鳞半爪,充其量只是你当初的一些斑驳碎片,最终忆秦娥都将不复存在。人生短暂,经不起等待。再曼妙的美
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-2 11:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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