meeagle 发表于 2024-4-3 18:09:11

w9825g6kh数据异常求助

本帖最后由 meeagle 于 2024-4-3 18:11 编辑

求助:电路板H743IIT+W9825G6KH+OV2640+RGB4.5屏,屏幕上出现这种规律的横线,经过多种排除法,现在认为比较大的可能是W9825G6KH的原因(写入的绿色字符也出现异常这点可以作为佐证),请教一下,有大佬遇到过这情形的吗?可能是什么原因造成的?
:PCB是二层板,没有做等长走线,各引脚直接IO,除了VDD其他引脚未接电容。

eric2013 发表于 2024-4-4 09:00: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;
}

meeagle 发表于 2024-4-7 22:07:29

谢谢回复!
经测试写入的数据比较偶然的情况会出现变化,但是同一行,紧跟着写入地址之后的内容,没写入的部分也变化,而且切换行的时间越长,变化就越大,,,,,,

eric2013 发表于 2024-4-8 07:47:33

meeagle 发表于 2024-4-7 22:07
谢谢回复!
经测试写入的数据比较偶然的情况会出现变化,但是同一行,紧跟着写入地址之后的内容,没写入的 ...

那确实要排查下硬件问题了。
页: [1]
查看完整版本: w9825g6kh数据异常求助