MINI2440从SD卡更新NK及nboot(一)

发布者:Delightful789最新更新时间:2024-08-02 来源: elecfans关键字:MINI2440  nboot 手机看文章 扫描二维码
随时随地手机看文章

买了友善 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  nboot 引用地址:MINI2440从SD卡更新NK及nboot(一)

上一篇:MINI2440从SD卡更新NK及nboot(二)
下一篇:友善2440开发板开启串口输出调试信息

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved