wicne中的file0000.chk垃圾文件

zhutaime   2010-3-25 10:56 楼主
系统是 2440 + PB5.0 构成的
   在拷贝文件时候  关机重启就会产生file0000.chk 。。。。。。文件
要如何才能修复呐  ?  等高手指点迷经

回复评论 (18)

可能是flash驱动的问题,flash断电异常。
点赞  2010-3-25 11:27
引用: 引用楼主 nx427 的回复:
系统是 2440 + PB5.0 构成的
在拷贝文件时候 关机重启就会产生file0000.chk 。。。。。。文件
要如何才能修复呐 ? 等高手指点迷经

我也感觉是 驱动的 问题 就是不知道 改哪里
  驱动都看了好几遍了  能具体说下改哪里吗?
点赞  2010-3-25 11:31
这个类似于磁盘碎片,可能是NAND驱动引起的。
点赞  2010-3-25 11:45
会不会是 我在写FLASH过程中 并没把数据全写进去 还有部分在内存中引起的 ?
点赞  2010-3-25 13:15
也遇到过没整明白
点赞  2010-3-25 13:57
引用: 引用 4 楼 nx427 的回复:
会不会是 我在写FLASH过程中 并没把数据全写进去 还有部分在内存中引起的 ?

那你是怎么解决的 ?
点赞  2010-3-25 14:34
以前有人遇到过,后来他自己解决了,也没有说怎么解决的。
点赞  2010-3-25 14:46
自己顶下   很急··
点赞  2010-3-25 15:00
这种情况没遇到过,拷贝过程中关机出现的?
点赞  2010-3-25 15:04
不懂,帮群里的兄弟顶下吧。
点赞  2010-3-25 15:05
帮忙顶下
点赞  2010-3-25 15:05
[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
   "Flags"=dword:24

看看你的注册表中这个键是如何配置的,设置一下禁用自动扫描试试看。

FATFS_DISABLE_AUTOSCAN 0x00000004 Disables automatic calls to ScanVolume.
点赞  2010-3-25 17:32
这样好像解决不了根本
  好想也是个办法  试试 谢谢 ···
点赞  2010-3-25 17:47
引用: 引用 13 楼 nx427 的回复:
这样好像解决不了根本
好想也是个办法 试试 谢谢 ···


如果在正常操作的情况不会产生就可以。
拷贝文件时断电,这在PC上也会产生类似的文件,因为已经是非法操作了。
点赞  2010-3-25 18:08
引用: 引用 14 楼 sunrain_hjb 的回复:
如果在正常操作的情况不会产生就可以。
拷贝文件时断电,这在PC上也会产生类似的文件,因为已经是非法操作了。

主要是 我是在拷贝结束后  才正常断电的 没有非法操作  
这个是 FLASH(k9f1g08) 驱动中 写的部分
     BYTE Status;
    ULONG SectorAddr = (ULONG)startSectorAddr;
    DWORD i;
    if (!pSectorBuff && !pSectorInfoBuff)
        return(FALSE);
    NF_RSTECC();                            // Initialize ECC.
    NF_nFCE_L();                            // Select the flash chip.
        NF_CLEAR_RB();  
    NF_CMD(CMD_RESET);                        // Send reset command.
        for(i=0;i<10;i++);
        NF_DETECT_RB();

    while (dwNumSectors--)
    {
        ULONG blockPage = SectorAddr;//(((SectorAddr / NAND_PAGE_CNT) * NAND_PAGE_CNT) | (SectorAddr % NAND_PAGE_CNT));
        if (!pSectorBuff)
        {
                    NF_CLEAR_RB();   
                    NF_CMD(CMD_WRITE);   // Write 1st command
                    NF_ADDR((2048+0)&0xff);         // Column (A[7:0]) = 0
                NF_ADDR(((2048+0)>>8)&0xff);         // A[11:8]
                    NF_ADDR((blockPage)&0xff);        // A[19:12]
                    NF_ADDR((blockPage>>8)&0xff);        // A[27:20]
        #if (K9F2G08_SUPPORT||K9F4G08_SUPPORT||K9F8G08_SUPPORT)
                    if((g_pNandFlashChip->FlashID!=0xECF1)&&(g_pNandFlashChip->FlashID!=0xECA1))
                            NF_ADDR((blockPage>>16)&0xff);
        #endif
                    NF_WRDATA( (pSectorInfoBuff->bBadBlock) );

                //  Write the first reserved field (DWORD)
                NF_DATA_W4(pSectorInfoBuff->dwReserved1);

                //  Write OEM reserved flag
                NF_WRDATA( (pSectorInfoBuff->bOEMReserved) );

                //  Write the second reserved field
                NF_WRDATA( (pSectorInfoBuff->wReserved2 >> 8) & 0xff );
                NF_WRDATA( (pSectorInfoBuff->wReserved2) & 0xff );
                    pSectorInfoBuff++;
        }
        else
        {
                        NF_CLEAR_RB();   
                        NF_CMD(CMD_WRITE);   // Write 1st command
                        NF_ADDR(0);         // Column (A[7:0]) = 0
                        NF_ADDR(0);         // A[11:8]
                        NF_ADDR((blockPage)&0xff);        // A[19:12]
                        NF_ADDR((blockPage>>8)&0xff);        // A[27:20]
#if (K9F2G08_SUPPORT||K9F4G08_SUPPORT||K9F8G08_SUPPORT)
                        if((g_pNandFlashChip->FlashID!=0xECF1)&&(g_pNandFlashChip->FlashID!=0xECA1))
                                NF_ADDR((blockPage>>16)&0xff);
#endif
       
                    if( ((DWORD) pSectorBuff) & 0x3)
                        {
                //  Write the data
                        WrPage2048Unalign (pSectorBuff,(PULONG)&s2440NAND->rNFDATA);
                                RETAILMSG(1,(TEXT("o")));
                                Sleep(1);
            }
            else
            {
                               
                WrPage2048(pSectorBuff,(PULONG)&s2440NAND->rNFDATA);                // Write page/sector data.
                            RETAILMSG(1,(TEXT("x")));
                                Sleep(1);
                        }
                        if(pSectorInfoBuff)
                        {
                        //  Write the bad block flag
                                NF_WRDATA( (pSectorInfoBuff->bBadBlock) );

                                //  Write the first reserved field (DWORD)
                                NF_DATA_W4(pSectorInfoBuff->dwReserved1);

                                //  Write OEM reserved flag
                                NF_WRDATA( (pSectorInfoBuff->bOEMReserved) );

                               
                                //  Write the second reserved field
                                NF_WRDATA( (pSectorInfoBuff->wReserved2 >> 8) & 0xff );
                                NF_WRDATA( (pSectorInfoBuff->wReserved2) & 0xff );
                                pSectorInfoBuff++;
                        }
                        pSectorBuff += NAND_PAGE_SIZE;
        }
        NF_CLEAR_RB();   
        NF_CMD(CMD_WRITE2);                    // Send write confirm command.
         //  Wait for RB
          NF_DETECT_RB();         // Wait tR(max 12us)

                    //  Check the status
              NF_CMD(CMD_STATUS);
        Status = NF_RDDATA();
        if (Status & 1)
        {
                    NF_nFCE_H();                            // Deselect the flash chip.
            //SetKMode (bLastMode);
            #ifdef BOOT_LOADER
                 EdbgOutputDebugString("ERROR: FMD_WriteSector: failed sector write.\r\n");
                        #else
                                 RETAILMSG(1,(TEXT("ERROR: FMD_WriteSector: failed sector write.\r\n")));
                        #endif
                        return(FALSE);
        }
//        NF_nFCE_H();                            // Deselect the flash chip.
        ++SectorAddr;
    }

    NF_nFCE_H();                            // Deselect the flash chip.

    //SetKMode (bLastMode);
    return(TRUE);
点赞  2010-3-26 09:59
拷贝结束后断电也会有这个问题?每次必现吗?
点赞  2010-3-26 10:58
我的也有,不过我是开机检测把这些文件删除了。

有人说是flash驱动的问题。昨天发来新的驱动,不过还没有试过。
点赞  2010-3-26 15:17
总结下  
  问题可能是出在 FAT32 文件系统和 flash驱动之间 冲突
falsh  扇区是2048的  FAT32的是512的  如何要解决的话可以把falsh的 扇区虚拟成512的来欺骗下CPU
(这个方法我没去实现 ,因为当时时间紧。。大家可以去实现下 ^_^)
然后就是 12楼的 改注册表(我是这么实现的,现在系统还算稳定还没出现问题呐)
也可以去public中改FAT 文件系统的文件 其中有个检测文件碎片的函数 把返回值改掉 也可以的
这么多 要是有更好的方法可以 提示下  
废话不说  结账给分
点赞  2010-4-2 16:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复