搜索
bottom↓
回复: 11

片外RAM自检不知道有没有什么好的算法呢?

[复制链接]

出0入0汤圆

发表于 2010-3-22 21:58:14 | 显示全部楼层 |阅读模式
片外RAM自检不知道有没有什么好的算法呢?谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-3-23 00:02:25 | 显示全部楼层
写OOXX再读

出0入31汤圆

发表于 2010-3-23 08:19:14 | 显示全部楼层
附录:
1、通用数据总线测试程序:
/* Set the data bus width to 32 bits. */
typedef uint32_t datum;
     
/**********************************************************************
*
* Function:    memtestDataBus
*
* Description: Test the data bus wiring in a memory region by
*              performing a walking 1's test at a fixed address
*              within that region.  The address (and hence the
*              memory region) is selected by the caller.
*
* Notes:      
*
* Returns:     0 if the test fails. The failure address is returned
*              in the parameter ppFailAddr.
*              1 if the test succeeds. The parameter ppFailAddr is
*              set to NULL.
*
**********************************************************************/
int memtestDataBus(datum *pAddress, datum **ppFailAddr)
{
    datum pattern;
    *ppFailAddr = NULL;   
    /* Perform a walking 1's test at the given address. */
    for (pattern = 1; pattern != 0; pattern <<= 1)
    {
        /* Write the test pattern. */
        *pAddress = pattern;
  
        /* Read it back (immediately is okay for this test). */
        if (*pAddress != pattern)
        {
            *ppFailAddr = pAddress;
            return 0;
        }
    }
    return 1;
}

2、通用地址总线测试程序
/**********************************************************************
* Function:    memtestAddressBus
*
* Description: Test the address bus wiring in a memory region by
*              performing a walking 1's test on the relevant bits
*              of the address and checking for aliasing.  The test
*              will find single-bit address failures such as stuck
*              high, stuck low, and shorted pins.  The base address
*              and size of the region are selected by the caller.
*
* Notes:       For best results, the selected base address should
*              have enough LSB 0's to guarantee single address bit
*              changes.  For example, to test a 64 KB region, select
*              a base address on a 64 KB boundary.  Also, the number
*              of bytes must describe a power-of-two region size.
*
* Returns:     0 if the test fails. The failure address is returned
*              in the parameter ppFailAddr.
*              1 if the test succeeds. The parameter ppFailAddr is
*              set to NULL.
*
**********************************************************************/
int memtestAddressBus(datum *pBaseAddress, uint32_t numBytes, datum **ppFailAddr)
{
    uint32_t addressMask = (numBytes - 1);
    uint32_t offset;
    uint32_t testOffset;   
    datum    pattern = (datum) 0xAAAAAAAA;
    datum    antipattern = (datum) ~pattern;

    *ppFailAddr = NULL;
     
    /* Write the default pattern at each of the power-of-two offsets. */
    for (offset = sizeof(datum); (offset & addressMask) != 0; offset <<= 1)
        pBaseAddress[offset] = pattern;
     
    /* Check for address bits stuck high. */
    pBaseAddress[0] = antipattern;
     
    for (offset = sizeof(datum); offset & addressMask; offset <<= 1)
    {
        if (pBaseAddress[offset] != pattern)
        {
            *ppFailAddr = &pBaseAddress[offset];
            return 0;
        }
    }
     
    pBaseAddress[0] = pattern;
     
    /* Check for address bits stuck low or shorted. */
    for (testOffset = sizeof(datum); testOffset & addressMask; testOffset <<= 1)
    {
        pBaseAddress[testOffset] = antipattern;
     
        for (offset = sizeof(datum); offset & addressMask; offset <<= 1)
        {
            if ((pBaseAddress[offset] != pattern) && (offset != testOffset))
            {
                *ppFailAddr = &pBaseAddress[offset];
                return 0;
            }
        }
     
        pBaseAddress[testOffset] = pattern;
    }
     
    return 1;
}

出0入0汤圆

发表于 2010-3-23 09:46:20 | 显示全部楼层
2楼的算法比我的好

出0入0汤圆

 楼主| 发表于 2010-3-23 21:36:21 | 显示全部楼层
谢谢各位。谢谢。

出0入0汤圆

 楼主| 发表于 2010-3-26 16:02:09 | 显示全部楼层
狂郁闷,我的外扩的SRAM可能又挂了。
唉....

出0入0汤圆

发表于 2010-3-26 16:11:16 | 显示全部楼层
可能会是配置不对吗?

出0入0汤圆

 楼主| 发表于 2010-3-27 22:19:58 | 显示全部楼层
可能还是和飞线飞的有关系。我的硬件设计人员前面刚设计过一个是基于DSP的,他不需要用到字节定位,所以,他以为这个LPC也是一样,导致了UB LB两个接法错误,后来只能飞线处理。

出0入0汤圆

发表于 2010-3-27 22:23:54 | 显示全部楼层
RADIO中直接按字节,地址和数据同时累加写.用以测试地址线和数据线的焊接及SRAM本身.
全部写完再读出来判断.

很SB但感觉够用了. UB,LB也测到了.

出0入0汤圆

发表于 2010-3-28 08:56:33 | 显示全部楼层
谢谢二楼

出0入4汤圆

发表于 2010-5-18 14:05:50 | 显示全部楼层
通用地址总线测试程序

出0入0汤圆

发表于 2014-7-12 16:52:48 来自手机 | 显示全部楼层
mark   测试sram
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-29 21:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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