73

帖子

0

TA的资源

一粒金砂(初级)

41
 
看手册吧。。找供应商要手册。对比下他们的这几个参数
Maker ID,Device ID,tRP, tWP,  tWB,tWH, tRH

回复

75

帖子

0

TA的资源

一粒金砂(初级)

42
 
不错,顶!
我们公司用K9F1208,nand flash性价比确实比较高。但经常读写的数据我们用电池+RAM的方式。
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

43
 
引用 39 楼 xqhrs232 的回复:
我的EMAIL-------xqhrs232@yahoo.com.cn.谢谢37楼

嗯 我发给你了
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

44
 
引用 42 楼 xuweiyue 的回复:
引用 39 楼 xqhrs232 的回复:
我的EMAIL-------xqhrs232@yahoo.com.cn.谢谢37楼

嗯 我发给你了


收到了,谢谢了!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

45
 
今天把代码好好看了下,算是明白了一些.那个存储NAND FLASH消息的数据结构static FlashDevSpec astNandSpec[]在   BSP/SRC/COMMON/NandFlash/FMD/cfnand.h文件里面.FMD_Init(  )的时候会根据读到的Make ID+Device ID去查这个数据结构表的,查到了对应的配置参数就有了,都不需要人为去控制修改什么代码,大小块的识别,读ID号就可以判断的,所以不管接什么NandFlash,程序会自动识别,自动调用对应的驱动,不要人参与的,我的6400应该是这样的!!!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

46
 
[code]


static FlashDevSpec astNandSpec[] = {
        /*************************************************************************/
        /* nMID, nDID,                                                           */
        /*            nNumOfBlks                                                 */
        /*                  nPgsPerBlk                                           */
        /*                      nSctsPerPg                                       */
        /*                         nNumOfPlanes                                  */
        /*                            nBlksInRsv                                 */
        /*                                nBadPos                                */
        /*                                   nLsnPos                             */
        /*                                      nECCPos                          */
        /*                                         nBWidth                       */
        /*                                                nTrTime                */
        /*                                                    nTwTime            */
        /*                                                         nTeTime       */
        /*                                                                nTfTime*/
        /*************************************************************************/
        /* 8Gbit DDP NAND Flash */
        { 0xEC, 0xD3, 8192, 64, 4, 2,160, 0, 2, 8, BW_X08, 50, 350, 2000, 50},    //K9G8G08
       
       
       
       
       
        /* 4Gbit DDP NAND Flash */
        { 0xEC, 0xAC, 4096, 64, 4, 2, 80, 0, 2, 8, BW_X08, 50, 350, 2000, 50},
        { 0xEC, 0xDC, 4096, 64, 4, 2, 80, 0, 2, 8, BW_X08, 50, 350, 2000, 50},
        //{ 0xEC, 0xBC, 4096, 64, 4, 2, 80, 0, 2, 8, BW_X16, 50, 350, 2000, 50},
        //{ 0xEC, 0xCC, 4096, 64, 4, 2, 80, 0, 2, 8, BW_X16, 50, 350, 2000, 50},
       
       
       
       
        /* 2Gbit NAND Flash */
        { 0xEC, 0xAA, 2048, 64, 4, 1, 40, 0, 2, 8, BW_X08, 50, 350, 2000, 50},
        { 0xEC, 0xDA, 2048, 64, 4, 1, 40, 0, 2, 8, BW_X08, 50, 350, 2000, 50},
        //{ 0xEC, 0xBA, 2048, 64, 4, 1, 40, 0, 2, 8, BW_X16, 50, 350, 2000, 50},
        //{ 0xEC, 0xCA, 2048, 64, 4, 1, 40, 0, 2, 8, BW_X16, 50, 350, 2000, 50},
       
       
       
       
        /* 2Gbit DDP NAND Flash */
        { 0xEC, 0xDA, 2048, 64, 4, 2, 40, 0, 2, 8, BW_X08, 50, 350, 2000, 50},
        { 0xEC, 0xAA, 2048, 64, 4, 2, 40, 0, 2, 8, BW_X08, 50, 350, 2000, 50},
        //{ 0xEC, 0xBA, 2048, 64, 4, 2, 40, 0, 2, 8, BW_X16, 50, 350, 2000, 50},
        //{ 0xEC, 0xCA, 2048, 64, 4, 2, 40, 0, 2, 8, BW_X16, 50, 350, 2000, 50},
       
       
       
       
        /*1Gbit NAND Flash */
        { 0xEC, 0xA1, 1024, 64, 4, 1, 20, 0, 2, 8, BW_X08, 50, 350, 2000, 50},    //K9F1G08
        { 0xEC, 0xF1, 1024, 64, 4, 1, 20, 0, 2, 8, BW_X08, 50, 350, 2000, 50},
        //{ 0xEC, 0xB1, 1024, 64, 4, 1, 20, 0, 2, 8, BW_X16, 50, 350, 2000, 50},
        //{ 0xEC, 0xC1, 1024, 64, 4, 1, 20, 0, 2, 8, BW_X16, 50, 350, 2000, 50},
       
       
       
       
        /* 1Gbit NAND Flash */
        { 0xEC, 0x79, 8192, 32, 1, 4,120, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
        { 0xEC, 0x78, 8192, 32, 1, 4,120, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
        //{ 0xEC, 0x74, 8192, 32, 1, 4,120,11, 0, 6, BW_X16, 50, 350, 2000, 50},
        //{ 0xEC, 0x72, 8192, 32, 1, 4,120,11, 0, 6, BW_X16, 50, 350, 2000, 50},
       
       
       
       
        /* 512Mbit NAND Flash */
        { 0xEC, 0x76, 4096, 32, 1, 4, 70, 5, 0, 6, BW_X08, 50, 350, 2000, 50},    //K9F1208
        { 0xEC, 0x36, 4096, 32, 1, 4, 70, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
       
       
       

        /* 512Mbit XP Card */
        { 0x98, 0x76, 4096, 32, 1, 4, 70, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
        { 0x98, 0x79, 4096, 32, 1, 4, 70, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
       
       

        //{ 0xEC, 0x56, 4096, 32, 1, 4, 70,11, 0, 6, BW_X16, 50, 350, 2000, 50},
        //{ 0xEC, 0x46, 4096, 32, 1, 4, 70,11, 0, 6, BW_X16, 50, 350, 2000, 50},
        /* 256Mbit NAND Flash */
        { 0xEC, 0x75, 2048, 32, 1, 1, 35, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
        { 0xEC, 0x35, 2048, 32, 1, 1, 35, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
        //{ 0xEC, 0x55, 2048, 32, 1, 1, 35,11, 0, 6, BW_X16, 50, 350, 2000, 50},
        //{ 0xEC, 0x45, 2048, 32, 1, 1, 35,11, 0, 6, BW_X16, 50, 350, 2000, 50},
       
       
       
        /* 128Mbit NAND Flash */
        { 0xEC, 0x73, 1024, 32, 1, 1, 20, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
        { 0xEC, 0x33, 1024, 32, 1, 1, 20, 5, 0, 6, BW_X08, 50, 350, 2000, 50},
        //{ 0xEC, 0x53, 1024, 32, 1, 1, 20,11, 0, 6, BW_X16, 50, 350, 2000, 50},
        //{ 0xEC, 0x43, 1024, 32, 1, 1, 20,11, 0, 6, BW_X16, 50, 350, 2000, 50},

        { 0x00, 0x00,    0,  0, 0, 0,  0, 0, 0, 0,      0,  0,   0,    0,  0}
};


 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

47
 
//几个相关函数的调用关系为::
EBOOT里面的OEMPlatformInit(   )----调用---1.BP_Init(  )----调用-----A.FMD_Init(  )++++B.FMD_GetInfo( )
                                         2.FMD_GetInfo( )
                                         3.GetNandInfo( )


1。其中NBOOT会自己去读NAND FLASH的ID号,大块就把g_bLargeBlock标志置为TRUE,如果是真了,NAND_ReadPage(  )读扇区的操作就有附加工作要做,大块了,操作的次数就要多


2。EBOOT里面已经在OEMPlatformInit(  )函数里面用BP_Init(  )函数对所外接的NAND FLASH进行了必要的初始化,所以他可以直接调用BP_XXX(  )和FMD_XXX(  )系列函数了,并且不会出错

3。NK里面加载了NAND FLASH的驱动,所以调用FMD_XXX(  )系列函数进行文件的读/写也不会有问题了


整个工作流程应该就是这样的!!!-----我的BSP是6400的,2440就不清楚了!

 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

48
 
//在FMD_Init(   )函数里面执行下面的操作------nCnt为在static FlashDevSpec astNandSpec[]数组里面找到的对应ID序号
        NUM_OF_BLOCKS = astNandSpec[nCnt].nNumOfBlks;
        PAGES_PER_BLOCK = astNandSpec[nCnt].nPgsPerBlk;
        SECTORS_PER_PAGE = astNandSpec[nCnt].nSctsPerPg;



//define in NandFlash/FMD/nand.h-------stDeviceInfo = GetNandInfo();-----在OEMPlatformInit(  )函数里面#define NUM_OF_BLOCKS                (stDeviceInfo.nNumOfBlks)
#define PAGES_PER_BLOCK               (stDeviceInfo.nPagesPerBlk)
#define SECTORS_PER_PAGE        (stDeviceInfo.nSctsPerPage)

#undef SECTOR_SIZE
#define SECTOR_SIZE                        (512)
#define NAND_SECTOR_SIZE        (SECTOR_SIZE*SECTORS_PER_PAGE)

#define IS_LB                                (SECTORS_PER_PAGE == 4)

//define in NandFlash/FMD/fmd.cpp
BOOL FMD_ReadSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors)
{
        BOOL bRet;

        //RETAILMSG(1, (TEXT("[R:0x%08x] \r\n"), startSectorAddr));
#if (NAND_DEBUG)
        RETAILMSG(1, (TEXT("[FMD] ++FMD_ReadSector(0x%08x) \r\n"), startSectorAddr));
#endif

#ifdef        SYNC_OP
        EnterCriticalSection(&g_csNandFlash);
#endif

        if ( IS_LB )
        {
                bRet = FMD_LB_ReadSector(startSectorAddr, pSectorBuff, pSectorInfoBuff, dwNumSectors, USE_NFCE);  //大块读扇区
        }
        else
        {
                bRet = FMD_SB_ReadSector(startSectorAddr, pSectorBuff, pSectorInfoBuff, dwNumSectors, USE_NFCE);   //小块读扇区        }

#ifdef        SYNC_OP
        LeaveCriticalSection(&g_csNandFlash);
#endif

#if (NAND_DEBUG)
        RETAILMSG(1, (TEXT("[FMD] --FMD_ReadSector()\r\n")));
#endif

        return bRet;
}

 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

49
 
[code]

//CE上层对下层的NAND FLASH接口的包装调用!!!-----OAK/DRIVERS/BLOCK/MSFLASH/FMDWRAPPERPDD/fmdwrapperpdd.cpp
VOID FmdWrapperPdd::GetFmdInterface()
{
    m_FmdInterface.cbSize = sizeof(FMDInterface);

    // Query FMD intrface from the FMD   
    //
    m_FmdInterface.pOEMIoControl = FMD_OEMIoControl;
   
    if (!FMD_OEMIoControl (IOCTL_FMD_GET_INTERFACE,
                           NULL, 0,
                           (PBYTE)&m_FmdInterface, sizeof(FMDInterface),
                           NULL))
    {
        // FMD does not support IOCTL_FMD_GET_INTERFACE, so build the FMDInterface
        // structure using the legacy FMD functions
        //
        m_FmdInterface.pInit = FMD_Init;
        m_FmdInterface.pDeInit = FMD_Deinit;
        m_FmdInterface.pGetInfo = FMD_GetInfo;        
        m_FmdInterface.pGetBlockStatus = FMD_GetBlockStatus;     
        m_FmdInterface.pSetBlockStatus = FMD_SetBlockStatus;
        m_FmdInterface.pReadSector = FMD_ReadSector;
        m_FmdInterface.pWriteSector = FMD_WriteSector;
        m_FmdInterface.pEraseBlock = FMD_EraseBlock;
        m_FmdInterface.pPowerUp = FMD_PowerUp;
        m_FmdInterface.pPowerDown = FMD_PowerDown;
    }

    // Query hook library in case any FMD functions need to be shimmed
    //
    m_FmdHookHandle = FMDHOOK_HookInterface(&m_FmdInterface);
}


//NAND FLASH对应的操作接口函数导出操作!!!------在 ++FMD_Init()被执行之前调用!!!

BOOL FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize, PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned)
{
        switch(dwIoControlCode)
        {
                case IOCTL_FMD_GET_INTERFACE:
                {
                        RETAILMSG(1, (TEXT("[FMD] FMD_OEMIoControl() : IOCTL_FMD_GET_INTERFACE\r\n")));

                        if (!pOutBuf || nOutBufSize < sizeof(FMDInterface))
                        {
                                DEBUGMSG(1, (TEXT("FMD_OEMIoControl: IOCTL_FMD_GET_INTERFACE bad parameter(s).\r\n")));
                                return(FALSE);
                        }

                        PFMDInterface pInterface = (PFMDInterface)pOutBuf;

                        pInterface->cbSize = sizeof(FMDInterface);
                        pInterface->pInit = FMD_Init;
                        pInterface->pDeInit = FMD_Deinit;
                        pInterface->pGetInfo = FMD_GetInfo;
                        pInterface->pGetInfoEx = NULL;                //FMD_GetInfoEx;
                        pInterface->pGetBlockStatus = FMD_GetBlockStatus;
                        pInterface->pSetBlockStatus = FMD_SetBlockStatus;
                        pInterface->pReadSector = FMD_ReadSector;
                        pInterface->pWriteSector = FMD_WriteSector;
                        pInterface->pEraseBlock = FMD_EraseBlock;
                        pInterface->pPowerUp = FMD_PowerUp;
                        pInterface->pPowerDown = FMD_PowerDown;
                        pInterface->pGetPhysSectorAddr = NULL;

                        break;
                }



.............................


default:
                RETAILMSG(1, (TEXT("[FMD:ERR] FMD_OEMIoControl() : Unknown IOCTL (0x%08x)\r\n"), dwIoControlCode));
                return FALSE;
        }

        return TRUE;
}

 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

50
 
今天试了一下,还是不行。估计真还得修改什么地方才能真正支持大块的NAND FLASH。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

51
 
介绍SLC++++MLC的文章

[url=http://www.dramx.com/Information/Knowledge/FLASH/Post/6864/Default.aspx][/url]
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

52
 

诚聘winCE软件工程师

我司是专业上网本、UMPC、MID方案设计公司,因项目需要现诚聘winCE精英。

职务要求:
大专以上学历;
1年以上winCE软件开发经验;
熟悉winCE6.0系统定制开发者优先;
熟悉三星6410方案者优先;
待遇面谈,看工作经验5K-10K;

联系人:李生
电话:0755-26972802
QQ:68848678
工作地址:深圳南山科技园


 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

53
 
引用 5 楼 gooogleman 的回复:
我今年都没有机会6410了。


我们也打算今年用的,也没机会了,呵呵
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

54
 
学习.....
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

55
 
不太清楚,学习中!!!!!!!!!!!!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表