应用程序通过SD卡更新NK及创建分区

feishanm 2010-07-29 10:46:26
S3C2440,WINCE6.0系统
想做一个工具,应用程序通过SD卡更新NK及创建分区
1、驱动中不能调用BP_LowLevelFormat()来格式化FLASH吗,调用FMD_EraseBlock()就没问题。
2、应用程序调用CreatePartitionEx()创建分区,该函数没有指定起始地址,默认是从第0块开始吗?如果是从第0块开始,是不是最少应该创建三个分区LBA、BINFS、FAT?
...全文
310 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangcuncunzhang 2010-10-29
  • 打赏
  • 举报
回复
不好意思,这段时间回老家,没有上来看。
OneOnce 2010-08-09
  • 打赏
  • 举报
回复
做个记号。。。。
xqhrs232 2010-08-09
  • 打赏
  • 举报
回复
做个记号
xiao_rq 2010-08-09
  • 打赏
  • 举报
回复
mark!学习下~~~
FrankBIBI 2010-08-09
  • 打赏
  • 举报
回复
是啊~LZ你来点总结~让小弟们 也来参考,学习下~呵呵
chinesedragon2010 2010-08-07
  • 打赏
  • 举报
回复
可以麻烦楼主分享下如何解决的吗?我也想学习一下,谢谢啊!
feishanm 2010-08-07
  • 打赏
  • 举报
回复
问题已经基本解决
chinesedragon2010 2010-08-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yangcuncunzhang 的回复:]
BP_LowLevelFormat()这个函数是用来对Flash进行底层格式化的,你这里用不上。

第一、用SD卡更新NK
这个简单,你做一个驱动(DLL)给应用程序用,这个DLL自己链接FMD.lib(就是开放FMD_EraseBlock(),FMD_ReadSector(),FMD_WriteSector()的那个库, 或者自己做另外1个库,反正能以bock, sector访问Fla……
[/Quote]
受教了,谢谢啊!
yihanbob 2010-07-31
  • 打赏
  • 举报
回复
牛人啊。。。学习了
feishanm 2010-07-31
  • 打赏
  • 举报
回复
自己再顶
IT铁哥 2010-07-31
  • 打赏
  • 举报
回复
学习一下。
FrankBIBI 2010-07-30
  • 打赏
  • 举报
回复
羊村村长 就是牛啊!!
xilidecai 2010-07-30
  • 打赏
  • 举报
回复
mark!学习下~~~
feishanm 2010-07-30
  • 打赏
  • 举报
回复
CreatePartitionEx(hStore,L"Part00",0x21,0xD200);//0x21 BINFS
CreatePartitionEx(hStore,L"Part01",0x0B,0x6FC00);// 0x0B MS-DOS 32-bit FAT
这样创建两个分区后,再烧录NBO,重启,第一次能启动,能进入到系统
但串口输出很多这样的信息
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715 
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715
FMD(FMD_LB_ReadSector): ECC ERROR - Page #: 0x2715


第二次重启就启动不了。

还发现一个问题,如果用DNW烧录NK,在存储管理器里看到 
capacity:252.75MB
Unallocated:384.00KB
若自己创建的分区,显示的信息为
capacity:252.75MB
Unallocated:3.00MB
feishanm 2010-07-30
  • 打赏
  • 举报
回复
牛人们应该很多的呀,是不是嫌分数少了,分少了可以加的。

我认为主要问题出在分区
yangcuncunzhang 2010-07-29
  • 打赏
  • 举报
回复
BP_LowLevelFormat()这个函数是用来对Flash进行底层格式化的,你这里用不上。

第一、用SD卡更新NK
这个简单,你做一个驱动(DLL)给应用程序用,这个DLL自己链接FMD.lib(就是开放FMD_EraseBlock(),FMD_ReadSector(),FMD_WriteSector()的那个库, 或者自己做另外1个库,反正能以bock, sector访问Flash就好了),在应用程序中,调用这个DLL来擦除、读、写Flash,就可以更新nk或者bootloader了。我在我们的项目中都是这样做的、
第二、CreatePartition()是应用层的接口。定义如下
 BOOL WINAPI CreatePartition(
HANDLE hStore,
LPCTSTR szPartitionName,
SECTORNUM snNumSectors
);

我们首先明确一些概念,在Wince下,存储设备都是以Store为标识的,比如SD卡、Nand Flash等是不同的Store,每个Store相当于是1个物理的存储设备,而每个Store可以被划分为几个分区,也就是Partition。当然对于物理上的一个设备,例如Nand Flash,你也可以用2份驱动来分别操作Flash的不同部分,在WinCE层就表现为2个物理存储设备了。^_^

CreatePartition()就是在指定的Store中建立分区,参数snNumSectors就是指定建立的分区占多少扇区!
它总是从指定的Store中空闲的那个扇区开始!假如store中没有分区,那么就是第一次建立分区,它就从这个store的第0个扇区开始;假如这个store中已经有几个分区了,那么它就从所有分区之后的第一个空闲分区建立。因此,CreatePartition()操作的是逻辑扇区,不直接面对物理的Flash块!
Store占用物理的哪些块?是由支持这个Store的底层驱动决定的,假如系统中有2个Nand Flash,第一个用来放BootLoader、Kernel等代码,第二个用来放文件系统,那么底层驱动可以从第二个Nand Flash的第0块开始给store用,当然你也可以空出来一些,而从中间的哪一块开始给store用!只要你喜欢;如果系统中只有1块Flash,那么前面一定要放Bootloader、kernel等,那么store就不能从第0块开始,但是它可以从代码之外的任何一块开始,这完全是你的底层驱动控制的。
博说医械研发 2010-07-29
  • 打赏
  • 举报
回复
EBOOT加载了相应的头文件和库吧
feishanm 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 veabol 的回复:]

BP_LowLevelFormat()这个函数应该是没有导出给外部用。
CreatePartitionEx()创建分区时应该不会占用OS和BOOTLOADER的FLASH空间,不过具体也要看BSP的具体实现。
[/Quote]
BP_LowLevelFormat()在E:\WINCE600\PUBLIC\COMMON\OAK\INC\bootpart.h这里定义,看到EBoot里好像也是直接引用它的,为啥EBOOT就能直接调用它呢?
博说医械研发 2010-07-29
  • 打赏
  • 举报
回复
BP_LowLevelFormat()这个函数应该是没有导出给外部用。
CreatePartitionEx()创建分区时应该不会占用OS和BOOTLOADER的FLASH空间,不过具体也要看BSP的具体实现。
feishanm 2010-07-29
  • 打赏
  • 举报
回复
DNW烧录NK,串口输出信息如下:
Enter your selection: w
Clear the free memory
Please send the Image through USB.
Download Address=0x80200000 Length=0x1a338e0
........................Done.
Low Level Format: Start = 0x1300, Num = 0x7ed00
.............................................................................................................................................................................................................Done.
Create Partition: Start = 0x1400, Num = 0xd200.
................................................Done.
Create Partition: Start = 0xe600, Num = 0x6fd00.
...Done.
Start Windows CE...;4load Windows CE Image..


它创建了两个分区,第一个BINFS,第二个为FAT(在存储管理器中得知的)
我在应用程序中也按这样创建了两个分区
CreatePartitionEx(hStore,L"Part00",0x21,0xD200);//0x21 BINFS
CreatePartitionEx(hStore,L"Part01",0x0B,0x6FC00);// 0x0B MS-DOS 32-bit FAT
烧录NBO,也是不行的。
加载更多回复(2)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧