aa513721 发表于 2011-11-3 18:32:46

ARM11 6410 裸板从SD卡烧写系统的时候烧写到一半就失败 ,请教下各位 不甚感激

各位大侠 搞了几天了 问了下老同事 给的意见是 DDR 没有焊好 软件版本不匹配 总共验证了7张板有1块是第一次烧写就OK的然后系统跑的677 的 也没问题 可以继续调试其他那些功能另外2块在更换了DDR 后 也OK 了 但是还有4块 更换了DDR 怎么换都不行 开始怀疑是SMT 在贴料前没有烘烤 于是自己烘烤了 再换上去 也不行。打电话去问SMT 厂 他们提前烘了一夜的。。。汗。。
之所以怀疑是DDR 的问题 是我们用上一个项目的DDR (DDR CPU 等 型号均是一样的) 换到这个板子上 有一张OK了。
贴下换DDR的实验记录
1.        换老板DDR OK
2.        换同批板上的DDR 失败
3.        加热 重新值锡 板上的DDR 失败
4.        换一片烘烤过来的DDR 失败
5.        换二片烘烤过来的DDR 失败
6.        换另一家供应商二片DDR 失败

现在貌似DDR 这条路是死了 又想回头再去找其他原因
下面是串口烧写的出错信息
icrosoft Windows CE Bootloader Common Library Version 1.4 Built Oct 31 2011 13:41:20
Bootloader for the SMDK6410 Version 2.5 Built Oct 31 2011

++FMD_Init()
FMD_Init() : Read ID = 0xecda
FMD_Init() : Read ID = 0x0000ecda
SECTORS_PER_PAGE=4
NUMBLOCKS : 2048(0x800), SECTORSPERBLOCK = 64(0x40), BYTESPERSECTOR = 2048(0x800)
DefineLayout: dwBlock = 0xe
DefineLayout: dwSector = 0x380
DefineLayout: g_pRegionTable.dwNumPhysBlocks = 0x800
dwBytesperBlock = 20000
dwSectorsPerBlock = 40
DefineLayout: g_flashInfo.dwNumPhysBlocks = 0x800
dwBytesperBlock = 20000
dwSectorsPerBlock = 40
NUMBLOCKS : 2048(0x800), SECTORSPERBLOCK = 64(0x40), BYTESPERSECTOR = 2048(0x800)
BOOTPART 131072 2048 64
NUMBLOCKS : 2048(0x800), SECTORSPERBLOCK = 64(0x40), BYTESPERSECTOR = 2048(0x800)
APLLCLK: 532000000, FCLK: 532000000, HCLK: 133000000, PCLK: 66500000
LDI_initialize_LCD_module LDI_ZWLCD_RGB
++LDI_ZWLCD_RGB_initialize
--LDI_ZWLCD_RGB_initialize
Load From SDMC
INFO: (unsigned)C_IsrHandler : 0x80049860
INFO: (unsigned)ASM_IsrHandler : 0x800499AC
INFO: (unsigned)pISR : 0xEA012663
MECC correctable error(0x40). Byte:82, bit:3
#### this SD card is made on SPEC 2.0
This SD card is made on SPEC 2.0

CardSize: 2002780160
ClockConfig() Card Working Frequency = 24MHz g_dwIsMMC=0
Reserving Blocks ...
Reserved blocks finish!
WriteFlash reserved Length = 0 MB
Will download stepldr.nb0
Sector total count = 4
WriteFlash reserved Length = 0 MB
Will download eboot.nb0
Sector total count = 256
BLSDCardDownload:cannot open file
Image Start = 0x80200000 Image Length = 0x321b458
ERROR: Checksum failure (expected=0x34CD0F5computed=0x34CD0E4)
****** Checksum failure on record 9, ABORT!!! ******
System ready!
Preparing for download...
+OEMLaunch.
IsValidMBR: MBR sector = 0x380 (invalid MBR)
OpenPartition: Invalid MBR.Cannot open existing partition 0x22.
IsValidMBR: MBR sector = 0x380 (invalid MBR)
OpenPartition: Invalid MBR.Cannot open existing partition 0x23.
IsValidMBR: MBR sector = 0x380 (invalid MBR)
OpenPartition: Invalid MBR.Cannot open existing partition 0x20.

烧一半失败的4张板子 出错信息都是一样的 可见问题是有共性的 我相信只要找到了原因 应该能一下子解决 。
IsValidMBR: MBR sector = 0x380 (invalid MBR)
OpenPartition: Invalid MBR.Cannot open existing partition 0x22.
IsValidMBR: MBR sector = 0x380 (invalid MBR)
OpenPartition: Invalid MBR.Cannot open existing partition 0x23.
IsValidMBR: MBR sector = 0x380 (invalid MBR)
OpenPartition: Invalid MBR.Cannot open existing partition 0x20.


这一段 我分析了下源代码 在这个函数中
HANDLE BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags)
{
      DWORD dwPartIndex;
      BOOL fExists;
      ASSERT (g_pbMBRSector);
      if (!IsValidMBR()) {
            DWORD dwFlags = 0;
            //fly
             RETAILMSG(1, (TEXT("BP_OpenPartition:: dwStartSector=0x%x ,dwNumSectors= 0x%x.,dwPartType = 0x%x/r/n"), dwStartSector, dwNumSectors,dwPartType));
            if (dwCreationFlags == PART_OPEN_EXISTING) {
                RETAILMSG(1, (TEXT("OpenPartition: Invalid MBR.Cannot open existing partition 0x%x./r/n"), dwPartType));
                return INVALID_HANDLE_VALUE;
            }
程序貌似跑到这   if (dwCreationFlags == PART_OPEN_EXISTING) 然后就输出 RETAILMSG(1, (TEXT("OpenPartition: Invalid MBR.Cannot open existing partition 0x%x./r/n"), dwPartType)); 然后返回一个值
在这个函数里面 有个
if (!IsValidMBR())   
大概意思是检验MBR是不是有效,如果无效将开始创建分区 我在网上找了下其他人的出错LOGO 他们这步是跑过了的 基本是都是无效的MBR 贴个兄弟的出错信息
Microsoft Windows CE Bootloader for TQ2440/SKY2440 Version 2.4 Built Aug 22 2009

TOC_Read ERROR: INVALID_TOC Signature: 0xFFFFFFFF
TOC_Init: dwEntry:1, dwImageType: 0x2, dwImageStart: 0x0, dwImageLength: 0x0, dwLaunchAddr: 0x0
+BootConfigInit
-BootConfigInit
TOC {
dwSignature: 0x434F544E
BootCfg {
。。
。。省略
+=OEMVerifyMemory+ dwStartAddr:0x80200000dwLength:0x1d5caf8
RAM image 0xa 0x81f5caf7
rom_offset=0x0.
ROMHDR at Address 80200044h
Writing single region/multi-region update, dwBINFSPartLength: 30788344

IsValidMBR: MBR sector = 0x0这个地方
OpenPartition: Invalid MBR.Formatting flash.

这个是格式化的 我还看到其他的 是另一个操作 这会我找不到了

因为系统DDR 等长都是严格匹配的 我也把DDR拆了 每个脚的对地电阻 我都测量了 都基本一样
而且那个好的板子系统跑起来后 也是很稳定我想应该不是硬件的问题 但是现在折腾来折腾去
分析到是硬件走线那里有干扰的问题。。
真心请教下大家 也希望留个脚印 以后其他人遇到这个问题的时候好解决
页: [1]
查看完整版本: ARM11 6410 裸板从SD卡烧写系统的时候烧写到一半就失败 ,请教下各位 不甚感激