社区
嵌入开发(WinCE)
帖子详情
三星的系列NandFlash有什么区别?K9F1G08/2G08/4G08/8G08.他们都是大块(2KB每页)的NAND FLASH?他们的驱动可以完全公用?还是不同芯片驱动要进行不同的修改?
xqhrs232
2009-02-10 08:37:22
加精
三星的系列NandFlash有什么区别?K9F1G08/K9F2G08/K9F4G08/K9F8G08.他们都是大块(2KB每页)的NAND FLASH?他们的驱动可以完全公用?还是不同芯片驱动要进行不同的修改?
...全文
8602
58
打赏
收藏
三星的系列NandFlash有什么区别?K9F1G08/2G08/4G08/8G08.他们都是大块(2KB每页)的NAND FLASH?他们的驱动可以完全公用?还是不同芯片驱动要进行不同的修改?
三星的系列NandFlash有什么区别?K9F1G08/K9F2G08/K9F4G08/K9F8G08.他们都是大块(2KB每页)的NAND FLASH?他们的驱动可以完全公用?还是不同芯片驱动要进行不同的修改?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
58 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Frog1228
2012-01-06
打赏
举报
回复
好长。。。
Devin_la
2010-08-30
打赏
举报
回复
ding qi
tzy_sky
2010-08-24
打赏
举报
回复
原先使用K9F1G08U0A 所以功能正常,由于K9F1G08U0A已升级为K9F1G08U0C 可以完全替代,但更换成这个型号的芯片后 在电脑上能打开U盘 并存放东西进去, 再次上电后发现之前保存的东西已经打不开,有时在电脑上文件的图标都显示不出来,能显示出来的文件打开也是乱码。 这个问题一直找不到原因 ,快急死我了,向大侠们求救!
西山锈码
2010-07-29
打赏
举报
回复
走过,路过.....
macklau
2010-03-01
打赏
举报
回复
不太清楚,学习中!!!!!!!!!!!!!!
Great_Bug
2009-12-26
打赏
举报
回复
学习.....
JNU_kinke
2009-12-12
打赏
举报
回复
[Quote=引用 5 楼 gooogleman 的回复:]
我今年都没有机会6410了。
[/Quote]
我们也打算今年用的,也没机会了,呵呵
xqhrs232
2009-03-28
打赏
举报
回复
介绍SLC++++MLC的文章
http://www.dramx.com/Information/Knowledge/FLASH/Post/6864/Default.aspx
xqhrs232
2009-02-25
打赏
举报
回复
今天试了一下,还是不行。估计真还得修改什么地方才能真正支持大块的NAND FLASH。
xqhrs232
2009-02-20
打赏
举报
回复
//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;
}
xqhrs232
2009-02-20
打赏
举报
回复
//在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;
}
xqhrs232
2009-02-19
打赏
举报
回复
//几个相关函数的调用关系为::
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就不清楚了!
xqhrs232
2009-02-19
打赏
举报
回复
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}
};
xqhrs232
2009-02-19
打赏
举报
回复
今天把代码好好看了下,算是明白了一些.那个存储NAND FLASH消息的数据结构static FlashDevSpec astNandSpec[]在 BSP/SRC/COMMON/NandFlash/FMD/cfnand.h文件里面.FMD_Init( )的时候会根据读到的Make ID+Device ID去查这个数据结构表的,查到了对应的配置参数就有了,都不需要人为去控制修改什么代码,大小块的识别,读ID号就可以判断的,所以不管接什么NandFlash,程序会自动识别,自动调用对应的驱动,不要人参与的,我的6400应该是这样的!!!
xqhrs232
2009-02-19
打赏
举报
回复
[Quote=引用 42 楼 xuweiyue 的回复:]
引用 39 楼 xqhrs232 的回复:
我的EMAIL-------xqhrs232@yahoo.com.cn.谢谢37楼
嗯 我发给你了
[/Quote]
收到了,谢谢了!
xuweiyue
2009-02-19
打赏
举报
回复
[Quote=引用 39 楼 xqhrs232 的回复:]
我的EMAIL-------xqhrs232@yahoo.com.cn.谢谢37楼
[/Quote]
嗯 我发给你了
thunderccx
2009-02-19
打赏
举报
回复
不错,顶!
我们公司用K9F1208,nand flash性价比确实比较高。但经常读写的数据我们用电池+RAM的方式。
xumercury
2009-02-19
打赏
举报
回复
看手册吧。。找供应商要手册。对比下他们的这几个参数
Maker ID,Device ID,tRP, tWP, tWB,tWH, tRH
xqhrs232
2009-02-19
打赏
举报
回复
我的EMAIL-------xqhrs232@yahoo.com.cn.谢谢37楼
xqhrs232
2009-02-19
打赏
举报
回复
[Quote=引用 37 楼 xuweiyue 的回复:]
引用 36 楼 wdw1600 的回复:
引用 33 楼 xqhrs232 的回复:
引用 32 楼 xuweiyue 的回复:
现在用的是K9F1G08,用微软的那个FMD.cpp修改就可以了;K9F2G08和K9F1G08的驱动架构一样,就是地址大小修改一下而已
是不是要修改很多地方?
只需要修改reserved block的大小就是了,就是那个结构体的第二个成员值
改的内容很少啊,你要的话我直接发给你,你留个邮箱。
[/Quote]
好啊
加载更多回复(37)
多图表实现员工满意度调查数据分析python
员工满意度是指员工对于工作环境、待遇、职业发展和组织管理等方面的满意程度。它是衡量员工对工作的整体感受和情绪状态的重要指标。
2020届软件工程本科毕业生毕业设计项目.zip
2020届软件工程本科毕业生毕业设计项目
基于stm32平衡小车
平衡小车 基于stm32 平衡小车 基于stm32 平衡小车 基于stm32
c语言火车票订票管理源码.rar
c语言火车票订票管理源码.rar
施耐德PLC例程源码四台水泵的轮换
施耐德PLC例程源码四台水泵的轮换提取方式是百度网盘分享地址
嵌入开发(WinCE)
19,502
社区成员
41,568
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章