硬汉嵌入式论坛

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

429+SDRAM+LTDC 的IMPRECISERR硬件异常

[复制链接]

33

主题

203

回帖

302

积分

高级会员

积分
302
发表于 2023-12-7 11:54:22 | 显示全部楼层 |阅读模式
同样硬件和软件,个别出现IMPRECISERR硬件异常,在LTDC_IRQHandler里引发:


void LTDC_IRQHandler(void)
{
        uint32_t Addr;
        uint32_t layer;


        LTDC->ICR = (U32)LTDC_IER_LIE;
        for (layer = 0; layer < GUI_NUM_LAYERS; layer++)
        {
                if (layer_prop[layer].pending_buffer >= 0)
                {
                        Addr = layer_prop[layer].address + layer_prop[layer].xSize * layer_prop[layer].ySize * layer_prop[layer].pending_buffer * layer_prop[layer].BytesPerPixel;
       
                        ////HAL_LTDC_SetAddress(&hltdc, Addr, layer);
                        ////__HAL_LTDC_RELOAD_CONFIG(&hltdc);
                        __HAL_LTDC_LAYER(&hltdc, layer)->CFBAR = Addr;
                        __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(&hltdc);
                        GUI_MULTIBUF_ConfirmEx(layer, layer_prop[layer].pending_buffer);
                        layer_prop[layer].pending_buffer = -1;
                }
        }
        ////HAL_LTDC_ProgramLineEvent(&hltdc, 0);
}

请问硬汉,这种是否SDRAM硬件问题?
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2023-12-7 11:57:57 | 显示全部楼层
运行时表现上电正常,但一段时间后屏幕刷新卡顿,最终看门狗复位
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2023-12-7 12:00:21 | 显示全部楼层
芯片为W9825G6KH-6
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2023-12-7 12:10:23 | 显示全部楼层
这个是emWin的多缓冲处理,是不是三缓存的空间大小没有开够,或者SDRAM批量数据测试有异常
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2023-12-7 12:12:45 | 显示全部楼层
一般来说,同一批硬件出现这个问题的极少。SDRAM批量数据测试有什么办法?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2023-12-7 14:23:00 | 显示全部楼层
waterx3 发表于 2023-12-7 12:12
一般来说,同一批硬件出现这个问题的极少。SDRAM批量数据测试有什么办法?

批量测试这个即可

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	函 数 名: bsp_TestExtSDRAM
*	功能说明: 扫描测试外部SDRAM的全部单元。
*	形    参: 无
*	返 回 值: 0 表示测试通过; 大于0表示错误单元的个数。
*********************************************************************************************************
*/
uint32_t bsp_TestExtSDRAM1(void)
{
	uint32_t i;
	uint32_t *pSRAM;
	uint8_t *pBytes;
	uint32_t err;
	const uint8_t ByteBuf[4] = {0x55, 0xA5, 0x5A, 0xAA};

	/* 写SRAM */
	pSRAM = (uint32_t *)EXT_SDRAM_ADDR;
	for (i = 0; i < EXT_SDRAM_SIZE / 4; i++)
	{
		*pSRAM++ = i;
	}

	/* 读SRAM */
	err = 0;
	pSRAM = (uint32_t *)EXT_SDRAM_ADDR;
	for (i = 0; i < EXT_SDRAM_SIZE / 4; i++)
	{
		if (*pSRAM++ != i)
		{
			err++;
		}
	}

	if (err >  0)
	{
		return  (4 * err);
	}

	/* 对SRAM 的数据求反并写入 */
	pSRAM = (uint32_t *)EXT_SDRAM_ADDR;
	for (i = 0; i < EXT_SDRAM_SIZE / 4; i++)
	{
		*pSRAM = ~*pSRAM;
		pSRAM++;
	}

	/* 再次比较SDRAM的数据 */
	err = 0;
	pSRAM = (uint32_t *)EXT_SDRAM_ADDR;
	for (i = 0; i < EXT_SDRAM_SIZE / 4; i++)
	{
		if (*pSRAM++ != (~i))
		{
			err++;
		}
	}

	if (err >  0)
	{
		return (4 * err);
	}

	/* 测试按字节方式访问, 目的是验证 FSMC_NBL0 、 FSMC_NBL1 口线 */
	pBytes = (uint8_t *)EXT_SDRAM_ADDR;
	for (i = 0; i < sizeof(ByteBuf); i++)
	{
		*pBytes++ = ByteBuf[i];
	}

	/* 比较SDRAM的数据 */
	err = 0;
	pBytes = (uint8_t *)EXT_SDRAM_ADDR;
	for (i = 0; i < sizeof(ByteBuf); i++)
	{
		if (*pBytes++ != ByteBuf[i])
		{
			err++;
		}
	}
	if (err >  0)
	{
		return err;
	}
	return 0;
}
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2023-12-8 09:28:49 | 显示全部楼层
出现问题的硬件测试了SDRAM,16MB测试没有错误返回。单图层,emWin缓存设置为8*1024*1024,问题依然,设置为4*1024*1024目前还没出问题,还是没找到原因。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2023-12-18 09:01:49 | 显示全部楼层

出现HardFault后的截图

这是出现HardFault后的截图,能看出具体是什么问题吗?

这是出现HardFault后的截图,能看出具体是什么问题吗?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2023-12-18 13:03:07 | 显示全部楼层
waterx3 发表于 2023-12-18 09:01
出现HardFault后的截图

faults report窗口截图看下。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2023-12-19 10:06:15 | 显示全部楼层
eric2013 发表于 2023-12-18 13:03
faults report窗口截图看下。

这个问题不是一定出现,昨天连着仿真器到现在也没有出现。继续观察。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2023-12-19 14:18:08 | 显示全部楼层

又出现了,请教一下,这个bsp_delayus函数,在多任务系统里,会不会有问题?
Error.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2023-12-20 09:07:20 | 显示全部楼层
waterx3 发表于 2023-12-19 14:18
又出现了,请教一下,这个bsp_delayus函数,在多任务系统里,会不会有问题?

没问题,你的这个是非精确异常,无法锁定具体位置。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2023-12-20 10:27:28 | 显示全部楼层
eric2013 发表于 2023-12-20 09:07
没问题,你的这个是非精确异常,无法锁定具体位置。

这种不精确的总线访问错误,一般查找的方向是什么?堆栈溢出?
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2024-1-12 09:50:36 | 显示全部楼层
各种测试后,想起来屏换了供应商,按新的时序重新配置,目前来看竟然好了。时序影响有这么大吗?而且,原先的时序配置也在新屏的时序有效范围里,怎么就有问题呢?
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2024-1-12 09:56:26 | 显示全部楼层
另外,请教一下,LTDC的线中断优先级怎么设置合适,最高还是最低?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2024-1-13 08:13:23 | 显示全部楼层
waterx3 发表于 2024-1-12 09:50
各种测试后,想起来屏换了供应商,按新的时序重新配置,目前来看竟然好了。时序影响有这么大吗?而且,原先 ...

会有这个问题,SDRAM的时序配置错误也会导致这种问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2024-1-13 08:13:58 | 显示全部楼层
waterx3 发表于 2024-1-12 09:56
另外,请教一下,LTDC的线中断优先级怎么设置合适,最高还是最低?

这个各种优先级都行,基本没什么影响。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 12:55 , Processed in 0.312955 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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