waterx3 发表于 2023-12-7 11:54:22

429+SDRAM+LTDC 的IMPRECISERR硬件异常

同样硬件和软件,个别出现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.pending_buffer >= 0)
                {
                        Addr = layer_prop.address + layer_prop.xSize * layer_prop.ySize * layer_prop.pending_buffer * layer_prop.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.pending_buffer);
                        layer_prop.pending_buffer = -1;
                }
        }
        ////HAL_LTDC_ProgramLineEvent(&hltdc, 0);
}

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

waterx3 发表于 2023-12-7 11:57:57

运行时表现上电正常,但一段时间后屏幕刷新卡顿,最终看门狗复位

waterx3 发表于 2023-12-7 12:00:21

芯片为W9825G6KH-6

eric2013 发表于 2023-12-7 12:10:23

这个是emWin的多缓冲处理,是不是三缓存的空间大小没有开够,或者SDRAM批量数据测试有异常

waterx3 发表于 2023-12-7 12:12:45

一般来说,同一批硬件出现这个问题的极少。SDRAM批量数据测试有什么办法?

eric2013 发表于 2023-12-7 14:23:00

waterx3 发表于 2023-12-7 12:12
一般来说,同一批硬件出现这个问题的极少。SDRAM批量数据测试有什么办法?

批量测试这个即可

/*
*********************************************************************************************************
*        函 数 名: 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 = {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;
        }

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

waterx3 发表于 2023-12-8 09:28:49

出现问题的硬件测试了SDRAM,16MB测试没有错误返回。单图层,emWin缓存设置为8*1024*1024,问题依然,设置为4*1024*1024目前还没出问题,还是没找到原因。

waterx3 发表于 2023-12-18 09:01:49


出现HardFault后的截图

eric2013 发表于 2023-12-18 13:03:07

waterx3 发表于 2023-12-18 09:01
出现HardFault后的截图

faults report窗口截图看下。

waterx3 发表于 2023-12-19 10:06:15

eric2013 发表于 2023-12-18 13:03
faults report窗口截图看下。

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

waterx3 发表于 2023-12-19 14:18:08


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

eric2013 发表于 2023-12-20 09:07:20

waterx3 发表于 2023-12-19 14:18
又出现了,请教一下,这个bsp_delayus函数,在多任务系统里,会不会有问题?

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

waterx3 发表于 2023-12-20 10:27:28

eric2013 发表于 2023-12-20 09:07
没问题,你的这个是非精确异常,无法锁定具体位置。

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

waterx3 发表于 2024-1-12 09:50:36

各种测试后,想起来屏换了供应商,按新的时序重新配置,目前来看竟然好了。时序影响有这么大吗?而且,原先的时序配置也在新屏的时序有效范围里,怎么就有问题呢?

waterx3 发表于 2024-1-12 09:56:26

另外,请教一下,LTDC的线中断优先级怎么设置合适,最高还是最低?

eric2013 发表于 2024-1-13 08:13:23

waterx3 发表于 2024-1-12 09:50
各种测试后,想起来屏换了供应商,按新的时序重新配置,目前来看竟然好了。时序影响有这么大吗?而且,原先 ...

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

eric2013 发表于 2024-1-13 08:13:58

waterx3 发表于 2024-1-12 09:56
另外,请教一下,LTDC的线中断优先级怎么设置合适,最高还是最低?

这个各种优先级都行,基本没什么影响。
页: [1]
查看完整版本: 429+SDRAM+LTDC 的IMPRECISERR硬件异常