15068|53

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

换个BSP,flash盘符不见了,不知道是什么原因 [复制链接]

昨天弄了个立宇泰2440的5.0BSP。放上去跑。
结果发现不了flash盘符,但是在存储管理器可以正常识别flash 的容量。

后来我拿另外一个可以识别的老一点的5.0BSP来对比注册表,发现是一样的,就是FLASH驱动有点小区别,于是我用这个可以识别的flash驱动代替立宇泰下的flash驱动,
重新编译,结果还是不能识别,真不知道是什么原因,请各位指示一下

还有另外一个超级不爽的问题,我想把原来的flash驱动恢复回来,结果编译总是报错(貌似PB还是笨笨的认为是老的flash驱动,说找不到老的flash驱动),这算不算是PB的一个BUG?

最新回复

收藏一下。  详情 回复 发表于 2009-2-13 09:05
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
估计是你自己编译的问题而不是PB的问题,仔细检查自己的代码和编译的方法
实在不行最好是Clean编译一下,或者是直接查看release目录下面的Ce.bib和Reginit.ini,看文件和注册表是不是真是已经修改成如你所愿。
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
应该不是PB的bug , 是'你'的bug
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 eagle1597 的回复:
应该不是PB的bug , 是'你'的bug


我是把整个FMD驱动代替的。
我都重启了,编译已经选定了clean了

我觉得可能是一些文件记录了一些东西。

-----做这些东西经验不足,很多问题出来都不知道怎么回事。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 
注册表里面把他隐藏了吧
编译问题可以考虑修改dirs,不要编译对应的驱动,修改bib中的驱动为旧的驱动文件路径
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
根据我的经验 计算机不会犯错 犯错的永远是人
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(中级)

7
 
不光是驱动,还跟注册表有关
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
建议对比一下两者的BSP,从网上找个文件比较器看看。

如果了另一个版本BSP ok的话,应该能找到问题的。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 4 楼 constantine 的回复:
注册表里面把他隐藏了吧
编译问题可以考虑修改dirs,不要编译对应的驱动,修改bib中的驱动为旧的驱动文件路径


我以前就是这么做的,我觉得挺奇怪的。
后来我想查ce.bib,但是这两个DLL什么都是一样的。查这个也查不出什么东西来。

后来我看了打包时候的警告
Warning: Mismatched time stamp on .rel file for module usbmsfn.dll
Rel files are required to load the code section of modules into slot 1 and therefore freeing up more virtual memory space in slot 0.
Warning: No .rel file found for module usbmsfn.dll, using old fixup style.
Warning: Mismatched time stamp on .rel file for module smflash.dll
Warning: No .rel file found for module smflash.dll, using old fixup style.


我觉得是没有clean掉以前的(我是选了clean才sysgen的,不知道怎么回事)
现在我手动把原来成功的DLL放到打包文件夹试试,如果行就这样做了。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

10
 
按照我上面的步骤搞定。

不过真不明白为什么会没有清理掉原来的flash驱动。
以前那个BSP的flash也是不行的,我同样的方法改,编译就可以了。哎,真是奇怪了。

现在想好好追查一下不能识别flash的原因
现在已经排除注册表,后来看到串口打印信息,问题锁定在flash驱动我的flash是大页的,而他识别成小页的。
----------------

谢谢大家提点了。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 
对了大家在没有运行自己的应用程序的时候CPU利用率是多少?我的是14%~18%,正常吗?怎么会这么高啊,不像台式机的风格哦。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 gooogleman 的回复:
对了大家在没有运行自己的应用程序的时候CPU利用率是多少?我的是14%~18%,正常吗?怎么会这么高啊,不像台式机的风格哦。


我的是0%-5%.看看进程里是什么程序占得多,百度里搜搜这个程序是干什么的。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 2 楼 eagle1597 的回复:
应该不是PB的bug , 是'你'的bug


汗!刚才重试,发现果然是我的BUG,我只选了build菜单下的“clean”,在右键编译BSP的时候没有选,
刚才选了狂报错。嘿嘿,那个flash驱动要改动很多的。

继续......超找原因。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 8 楼 gooogleman 的回复:
后来我看了打包时候的警告
Warning: Mismatched time stamp on .rel file for module usbmsfn.dll
Rel files are required to load the code section of modules into slot 1 and therefore freeing up more virtual memory space in slot 0.
Warning: No .rel file found for module usbmsfn.dll, using old fixup style.
Warning: Mismatched time stamp on .rel file for module smflash.dll
Warning: No .rel file found for module smflash.dll, using old fixup style.


看到“No .rel file found for module smflash.dll, using old fixup style”就应该知道问题所在了。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

15
 
估计你的注册表没有设置好,有没低/高格格式化?
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 14 楼 xqhrs232 的回复:
估计你的注册表没有设置好,有没低/高格格式化?


根据我的现象描述,明显不是,现在我正在查找原因。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 
我今天仔细看了一下flash驱动
觉得不能出现盘符,应该和如下函数有关系
FMD_GetBlockStatus
FMD_SetBlockStatus
FMD_GetInfo——这个经过确认,没有问题,现在看看其他两个函数。

高手们,怎么不给点指点啊。一个人摸索好难的。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

18
 
1. PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut): 这个是Flash设备的初始化函数。在WinCE启动的时候,要加载Flash驱动时,首先调用这个函数对flash设备进行初始化。如果你的系统中有nandflash的controller,那么你需要在这里对你的nandflash controller进行初始化。如果没有的话,你需要针对你的硬件设计进行相关的片选,时序等进行配置。返回一个handle表示成功,这个handle将被FMD_Deinit(..)函数用到,如果返回NULL表示失败。

2. BOOL FMD_Deinit(PVOID hFMD): 这个函数在nandflash驱动卸载的时候被调用,参数就是FMD_Init函数返回的Handle.一般在这个函数里面,你可以释放一些用到的资源,然后关闭nandflash controller。

3. BOOL FMD_ReadSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors): 这个函数用于读nandflash的一个扇区。对于nandflash来说,分大page和小page,大page是2048个bytes一页,小page是512个bytes一页。所以大page每个扇区有2048 bytes,小page每个扇区有512 bytes。

    startSectorAddr: nandflash物理扇区的起始地址,对于nandflash来说,就是nandflash中从哪个page开始。

    pSectorBuff:扇区数据buffer,从nandflash中读出的每一个扇区的数据都存放在这个buffer中。

    pSectorInfoBuff:扇区信息buffer,一般每个扇区的信息会被保存在nandflash的带外数据中,针对小page,带外数据有16 bytes,大page有64 bytes。从nandflash的带外数据将该扇区的相关信息读出来,存放在这个buffer中。

    dwNumSectors:读取多少个扇区,对于nandflash来说相当于读取多少个page。

4. BOOL FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors): 该函数用于写nandflash的一个扇区。参数和上面的FMD_ReadSector的参数意思一样,就不多说了。

5. BOOL FMD_EraseBlock(BLOCK_ID blockID): 该函数用于擦出nandflash的一个block,参数为要擦除nandflash的block地址,也就是第几个block。

6. DWORD FMD_GetBlockStatus(BLOCK_ID blockID): 该函数获得nandflash中某一个block的状态。参数为nandflash的block地址。由于nandflash中可能有坏块,所以针对nandflash,这个函数首先会检查当前块是否是坏块,这个一般通过读取当前block的第0个page和第1个page的带外数据。对于小page nandflash一般是读取第5个byte,对于大page nandflash一般读取第0个byte,如果不为0xff表示该块是坏块。当然,至于具体该读哪个byte,最好还是看一下所用nandflash的datasheet,确认一下,不同的厂家可能有所不同。如果发现该块是坏块,应该返回BLOCK_STATUS_BAD。如果不是坏块,需要读取这个块的起始扇区的扇区信息。如果读该扇区信息出错,应该返回BLOCK_STATUS_UNKNOWN,否则,判断独到的信息,返回相应结果。

7. BOOL FMD_SetBlockStatus(BLOCK_ID blockID, DWORD dwStatus): 该函数设置nandflash某个block的状态,第一个参数是nandflash的block地址,第二个是要设置的状态。在这个函数中,首先检查dwStatus是不是BLOCK_STATUS_BAD,如果是就对nandflash作坏块标记,然后返回FALSE。如果不是,就将dwStatus写到该block的第0个page的扇区info中。这个函数和上面的函数正好是相反的。

8. BOOL FMD_GetInfo(PFlashInfo pFlashInfo): 该函数用于返回flash的信息。其中pFlashInfo是一个包含flash信息的结构。

    pFlashInfo->flashType:flash的类型,对于nandflash来说,应该是NAND。

    pFlashInfo->wDataBytesPerSector:一个扇区多少个bytes,对于大page是2048,对于小page是512。

    pFlashInfo->dwNumBlocks:flash中总共有多少个block,查一下所用的nandflash的datasheet就知道了。

     pFlashInfo->wSectorsPerBlock:每个block中包含多少个扇区。

    pFlashInfo->dwBytesPerBlock:每个block中包含多少个bytes。
================================================================
//-----------看了这篇微软MVP的文章,发现flash驱动无非是如下几个函数,能够启动又看不见盘符,真是晕死了,觉得不知道原因在哪里。启动的时候就是调用如下几个函数吧
FMD_Init
FMD_GetBlockStatus
FMD_SetBlockStatus
FMD_GetInfo
=======================我对比了,都没有错,怎么回事呢?期待高手指点一下。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

19
 
FMD::FMD_Init
FMD::FMD_Init - pBSPArgs->nfsblk = 0xffffffff
FMD::FMD_Init - READ_REGISTER_BYTE(pNFSBLK) = 0x0
FMD::FMD_Init Softreset .....
FMD::FMD_Init Done
[S2440:  IN] ++_ReadXID()
MID = 0xec, DID = 0xdc 4th Cycle : 0x10
NUMBLOCKS : 4096(0x1000), SECTORSPERBLOCK = 64(0x40), BYTESPERSECTOR = 2048(0x800)
FMD_LB_GetBlockStatus (0x0)0x0
FMD::FMD_LB_ReadSector 0x0
FMD::NAND_LB_ReadSectorInfo 0x0
FMD::FMD_LB_ReadSector 0x0
FMD::NAND_LB_ReadSectorInfo 0x0
FMD_LB_GetBlockStatus (0x1)0x40
FMD::FMD_LB_ReadSector 0x100
FMD::NAND_LB_ReadSectorInfo 0x100
FMD::FMD_LB_ReadSector 0x40
FMD::NAND_LB_ReadSectorInfo 0x40

-----------------------------------------------这是我打印的启动信息。
启动的时候要那么多的检测,打开信息后,启动很久。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

20
 
你的注册表项里有没有把分区设置为隐藏属性啊。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表