买了友善 MINI2440 开发板, SuperVivi 不开源,自己的板子又没有 NOR Flash ,烧入系统带来很大的困扰,无奈之下,只能自己做烧入工具来解决。大致思路,先从 SD 卡启动 WINCE ,再用工具格式化 Flash 及分区,将 Nboot 及 NK 写入相应的块。
应用程序操作 Flash ,无非就是 Read/Write/Earse Flash , CSDN 上有一牛人写 在 WinCE 下,应用程序直接读 / 写 / 擦除 flash 设备的方法 。
下面是我的部分代码:
1 BOOL FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize,PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned)
2 {
3 ……
4 switch(dwIoControlCode)
5 {
6 ……
7 //参数自己定义
8 case 0xFF11:
9 return FMD_ReadSector(nInBufSize,pInBuf,NULL,nOutBufSize); //读Sector
10 break;
11 case 0xFF22:
12 return FMD_WriteSector(nInBufSize,pInBuf,NULL,nOutBufSize); //写Sector
13 break;
14 case 0xFF33:
15 return FMD_EraseBlock(nInBufSize); /擦除Block
16 break;
17 }
18 }
修改注册表,以便应用程序调用驱动
1 [HKEY_LOCAL_MACHINEDriversBuiltInNANDFLASH]
2 'Prefix'='DSK'
3 'Dll'='nandflash.dll'
4 'Index'=dword:1
5 'Order'=dword:0
6 'Profile'='NANDFLASH'
7 'IClass'='{A4E7EDDA-E575-4252-9D6B-4195D48BB865}'
8
9 [HKEY_LOCAL_MACHINESystemStorageManagerProfilesNANDFLASH]
10 ;'DefaultFileSystem'='BINFS'
11 'AutoPart'=dword:1
12 'AutoMount'=dword:1
13 'AutoFormat'=dword:1
14 'PartitionDriver'='mspart.dll'
15 'Name'='Microsoft Flash Disk'
16 'Folder'='ResidentFlash'
17 [HKEY_LOCAL_MACHINESystemStorageManagerProfilesNANDFLASHFATFS]
18 'Flags'=dword:14
19 'FormatExfat'=dword:1
20 'CheckForFormat'=dword:1
21 'EnableWriteBack'=dword:1
应用程序调用驱动打开设备
hFirm = CreateFile (TEXT ('DSK1:' ), GENERIC_READ | GENERIC_WRITE , 0, NULL , OPEN_EXISTING , 0, NULL );
再通过DeviceIoControl 操作Flash
更新NBOOT ,NBOOT 写在第0 块,用CreateFile 及ReadFile 将NBOOT.bin 读取至数组中,再写入Flash
关键代码:
1 DWORD ReadSize = 4*1024;//NBOOT最大4K
2 DWORD actlen = 0;
3 PCHAR pBuff=(char *)malloc(ReadSize);
4 memset(pBuff,0xFF,ReadSize);
5 iRet = ReadFile(hFile, pBuff, ReadSize, &actlen, NULL);
6 if (iRet == FALSE)
7 {
8 RETAILMSG(1,(TEXT('Read nboot File Failed.nr')));
9 return;
10 }
11 //先Erase,再Write
12 iRet = EraseBlock(hFirm,0);//Erase 第0块
13 if (!iRet)
14 {
15 RETAILMSG(1,(TEXT('Ease Erase 0 Failed.nr')));
16 }
17 //从第0块第0页开始写,每次写一页,我用的Flash每页为512bytes
18 for (int i=0; i < ReadSize/512; i++)
19 {
20 iRet = WriteSector(hFirm,i,&pBuff[i*512]);
21 if (iRet == FALSE)
22 {
23 RETAILMSG(1,(TEXT('Write nboot File Failed.nr')));
24 return;
25 }
26 }
27
上一篇:MINI2440从SD卡更新NK及nboot(二)
下一篇:友善2440开发板开启串口输出调试信息
推荐阅读最新更新时间:2024-11-03 23:17
设计资源 培训 开发板 精华推荐
- jameswangsynnex带你进入智能电网世界
- 直播已结束【普源精电2020新品发布会暨行业论坛】
- 25美分实现25种功能的TI MSP430铁电超值微控制器方案即将直播!快来报名围观!
- 围读 《嵌入式软件的时间分析》——汽车行业领域的嵌入式软件理论、分析及实践
- 2009 EEWORLD 年度人物大评选活动评奖揭晓
- 有奖直播【Keysight World Tech Day 2023分论坛——汽车自动驾驶与新能源】
- 系列二:TI模拟芯片选型指南(参与过系列一活动的也可以参加这期哟)
- 有奖电源设计问卷调查
- 答题有礼|共同发展携手腾飞泰克公司助力中国量子
- 【下单全额返现,300元封顶,不限产品】MPS商城钜惠体验季!