买了友善 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开发板开启串口输出调试信息
- 热门资源推荐
- 热门放大器推荐
- 使用 ON Semiconductor 的 FAN2518S 的参考设计
- LTC1530S8、3.3V/3A 稳压器
- 使用 ON Semiconductor 的 ADP3167 的参考设计
- 使用 Analog Devices 的 LT3420EDD 的参考设计
- 基于Kinetis® M的低成本单相电表参考设计
- LTC3708、具有上升/下降轨跟踪功能的 2.5V/15A 和 1.2V/15A 稳压器
- NXQ1TXH5插件板
- 应变仪仪表放大器
- WRL-13287,基于 ESP8266 802.11 无线局域网的 SparkFun Wi-Fi Shield
- 4.1W、3-LED 通用 LED 照明驱动器

非常经典的关于LLC的杨波博士论文
OP413EY

XC6406PP60DL






京公网安备 11010802033920号