硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2412|回复: 22
收起左侧

[emWin] 求助:emwin下sdram总线引发的 Fault如何做抗干扰处理

[复制链接]

1

主题

11

回帖

61

积分

初级会员

积分
61
发表于 2018-9-16 19:53:12 | 显示全部楼层 |阅读模式
情况如下:
1.正常情况下不使用emwin时,对SDRAM施加外部信号干扰,可以引起LCD花屏(暂时的或者持续的),但是不会引发bus fault
2.当使用emwin后(界面很简单),同样施加外部信号干扰,会引发bus fault->hardfault,

下面的语句,默认屏蔽的话也仅仅是直接上访hardfault
//SCB->SHCSR |= 0x00070000; /* enable Usage Fault, Bus Fault, and MMU Fault*/


不知道如何解决此问题,是有什么方法屏蔽这个fault还是针对这个fault发生后修复它(不复位)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-17 01:28:04 | 显示全部楼层
你裸机测试和emWin测试有什么区别? 裸机没有使用DMA2D?
回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-17 08:31:43 | 显示全部楼层
本帖最后由 XIAN 于 2018-9-17 08:53 编辑
eric2013 发表于 2018-9-17 01:28
你裸机测试和emWin测试有什么区别? 裸机没有使用DMA2D?

起初我也是这样认为的, 但进一步的测试发现: RTOS/DMA2D/emwin,他们的各种组合测试,只要使用了emwin就会引发fault,与是否使用RTOS/DMA2D无直接关系
这个测试就简单的循环绘制几个2D界面清屏,两者的差别主要是自建的函数绘图与emwin-api绘图的区别,两者都有使用DMA2D

版主有没有针对外部因素造成的fault的处理修复的方法或者例程?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-17 10:01:56 | 显示全部楼层
XIAN 发表于 2018-9-17 08:31
起初我也是这样认为的, 但进一步的测试发现: RTOS/DMA2D/emwin,他们的各种组合测试,只要使用了emwin就会 ...

有一个,可以看此贴:http://www.armbbs.cn/forum.php?m ... 2%BC%FE%D2%EC%B3%A3
回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-17 10:33:30 | 显示全部楼层
本帖最后由 XIAN 于 2018-9-17 10:36 编辑

版主,你这个是异常分析定位代码,针对调试用的, 我这里已经有类似功能的代码.
实际我需要的是当异常发生时,在运行的过程修复它,比如因外部干扰发生时发生了busfault,我们如何在进入busfault后修复它而不导致复位.
在使用emwin和不使用emwin中,发现了这个奇怪的问题, 不知道为何在有外部干扰时使用emwin会出现busfault,不使用的不会出现,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-17 11:31:57 | 显示全部楼层
XIAN 发表于 2018-9-17 10:33
版主,你这个是异常分析定位代码,针对调试用的, 我这里已经有类似功能的代码.
实际我需要的是当 ...

这个还是得从你的硬件找原因。你当前的测试不具有普适性,不行的话,你再焊接一块板子试试。

如果进出硬件异常的频率不是很高,可以就让它进。

其实你当前的这个跟emWin没什么关系,emWin仅仅是个软件层。跟你的裸机相比就是有些底层调用到一些你裸机没有的API处理方式。

ps:让你的GUIConf.C文件的emWin动态内存时候内部SRAM试试。

回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-17 12:01:53 | 显示全部楼层
eric2013 发表于 2018-9-17 11:31
这个还是得从你的硬件找原因。你当前的测试不具有普适性,不行的话,你再焊接一块板子试试。

如果进出 ...

换很多板子结果也一样,, 你可以试试, (跟打静电的结果也一样)用钥匙去刮触SDRAM的引脚,就可以得到上面说的两种结果

看起来emwin的驱动层代码都暴露在我们工程里,但就是找不到问题在哪一块引起的,还是ST-emwin还有其他隐含的ST/M4配置代码

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-17 12:16:33 | 显示全部楼层
XIAN 发表于 2018-9-17 12:01
换很多板子结果也一样,, 你可以试试, (跟打静电的结果也一样)用钥匙去刮触SDRAM的引脚,就可以得到上面说 ...

帮你测试了,我们的板子没问题啊,看测试,我用的镊子。
3.gif



回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-17 13:41:24 | 显示全部楼层
eric2013 发表于 2018-9-17 12:16
帮你测试了,我们的板子没问题啊,看测试,我用的镊子。

谢谢版主

但你这不科学,我用V6的板(它跑的是显波器的程序),我用螺丝刀伸到里面去都挂了(先屏幕闪动,后界面卡了不动了) 不会是你静止的画面没有SDRAM传输不受影响吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-17 14:22:44 | 显示全部楼层
XIAN 发表于 2018-9-17 13:41
谢谢版主

但你这不科学,我用V6的板(它跑的是显波器的程序),我用螺丝刀伸到里面去都挂了(先屏幕 ...

那我明白了,你这种情况肯定异常,一个最简单的道理,比如刷新某个控件需要指定的句柄,你滑动这些管脚,数据肯定异常了,你搞个不正确的句柄去操作就直接硬件异常。

而静态的仅仅是LTDC在不断的读取SDRAM,所以读取出错也没关系。我这么说你是否明白了。
回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-17 14:30:09 | 显示全部楼层
本帖最后由 XIAN 于 2018-9-17 14:41 编辑
eric2013 发表于 2018-9-17 14:22
那我明白了,你这种情况肯定异常,一个最简单的道理,比如刷新某个控件需要指定的句柄,你滑动这些管脚, ...
有一点点理解: 不使用emwin时,只是在做内存copy,read,write,错误只是color,无数据结构类的错误,也就是花屏;使用emwin,如果地址或数据错了,就会出现数据结构不完整,无法校验,emwin上报异常
~
但是你不使用emwin, 虽然也在操作sdram,也使用dma2d 只会花屏, 不会异常, 重点就来了,使用emwin的情况下,在有外界干扰(静电测试,产品要过认证的)时该如何处理呢,有点棘手, 不知道如何处理这个busfault,总不能说不用这个emwin吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-17 14:39:20 | 显示全部楼层
XIAN 发表于 2018-9-17 14:30
但是你不使用emwin, 虽然也在操作sdram,也使用dma2d 只会花屏, 不会异常, 重点就来了,使用emwin的情况下, ...

这就是区别了,你裸机时候仅仅是刷刷数据,你的写入的数据出错不出错都没有关系的。

静电干扰不会采用这种暴力测试,这种暴力测试没有多少产品能通过,一不小心短路了还容易把芯片损坏。

我只能帮你这么多了。

回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-17 14:45:32 | 显示全部楼层
eric2013 发表于 2018-9-17 14:39
这就是区别了,你裸机时候仅仅是刷刷数据,你的写入的数据出错不出错都没有关系的。

静电干扰不会采用 ...

好吧, 感谢!!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-17 16:51:03 | 显示全部楼层
又帮你测试了下,算是帮人帮到底吧,在GUIConf.C文件里面,你把emWin动态内存修改为使用内部SRAM,就不会死机了,仅仅是数据错误造成的花屏。
5.gif
回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-17 20:54:59 | 显示全部楼层
eric2013 发表于 2018-9-17 16:51
又帮你测试了下,算是帮人帮到底吧,在GUIConf.C文件里面,你把emWin动态内存修改为使用内部SRAM,就不会死 ...

放在内部,然后不让emwin使用动态内存(如:存储设备),大量的图片手动加载到外部sdram,画图的时候自己用dma2d-copy到lcd吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-18 02:00:11 | 显示全部楼层
XIAN 发表于 2018-9-17 20:54
放在内部,然后不让emwin使用动态内存(如:存储设备),大量的图片手动加载到外部sdram,画图的时候自己 ...

内部SRAM做emWin动态内存,动态内存什么随意用,只要你的空间都就行。

而图片全部用流位图加载到SDRAM即可,调用emWin的API显示。
回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-18 13:19:51 | 显示全部楼层
eric2013 发表于 2018-9-18 02:00
内部SRAM做emWin动态内存,动态内存什么随意用,只要你的空间都就行。

而图片全部用流位图加载到SDRAM ...

怎么好几次回帖都是凌晨2点钟啊,身体还扛得住吗,白先生..

~很纠结
把emwin的驱动和绘图API看了一遍, 不修改原有的驱动,只有存储设备的API可以画到用户(动态)内存,也支持剪切等等很多操作,但是设置到内部SRAM这套API就不能用了(太小了).
~只有存储设备的API比较好用
有这样一种需要比如有100张小图片,使用存储设备时可以用一张大图拼合,如果不使用它时,用C流要处理100张图的转换了,所以我在想 有没有GUI_DrawBitmap这类函数把图片画到指定内存的API(需要它的解压算法),开机时把图片画到sdram中缓存,用的时候按需要(可能要剪切)直接copy(不会有异常)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-19 02:57:31 | 显示全部楼层
XIAN 发表于 2018-9-18 13:19
怎么好几次回帖都是凌晨2点钟啊,身体还扛得住吗,白先生..

~很纠结

小图片直接绘制就行。
回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-19 10:59:10 | 显示全部楼层
eric2013 发表于 2018-9-19 02:57
小图片直接绘制就行。

要动态旋转屏幕, GUI_SetOrientation 这个函数是不是用了堆中内存(要申请800*480*2), 改内部SRAM还是失败了

旋转器件覆盖内部屏幕缓冲器中的整个虚拟屏幕。为此,使用该函数需要额外的存储器空间,以便存
储额外的屏幕缓冲器。所需字节数可按以下公式计算:
虚拟 xSize * 虚拟 ySize * BytesPerPixel
各绘制操作首先更新该缓冲器。然后,受影响的像素被传给显示驱动器件


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2018-9-19 11:02:38 | 显示全部楼层
XIAN 发表于 2018-9-19 10:59
要动态旋转屏幕, GUI_SetOrientation 这个函数是不是用了堆中内存(要申请800*480*2), 改内部SRAM还是失败 ...

剩下问题,自己研究下吧,已经帮你很多了
回复

使用道具 举报

1

主题

11

回帖

61

积分

初级会员

积分
61
 楼主| 发表于 2018-9-19 11:07:24 | 显示全部楼层
eric2013 发表于 2018-9-19 11:02
剩下问题,自己研究下吧,已经帮你很多了

好的,谢谢版主, 天天在研究, 把emwin的实现机制都看了,可惜有些内部API没有提供给用户使用,差点就自己写个图形库了
回复

使用道具 举报

29

主题

77

回帖

164

积分

初级会员

积分
164
发表于 2018-12-25 17:43:21 | 显示全部楼层
您好,我这边新画的板子测试SDRAM出现了数据不一致,你的是不是一样的情况?
回复

使用道具 举报

28

主题

130

回帖

214

积分

高级会员

积分
214
发表于 2022-3-18 22:58:59 | 显示全部楼层
hecudashi 发表于 2018-12-25 17:43
您好,我这边新画的板子测试SDRAM出现了数据不一致,你的是不是一样的情况?

也遇到类似情况
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-30 02:40 , Processed in 0.233910 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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