8862|25

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:SD卡升级WinCE问题 [复制链接]

最近需要做SD卡升级系统。由于是第一次做,又没有人教下思路,所以多是自己在看在想的。
思路:在EBOOT里直接添加这部分功能。跟具体一点是在DownLoadImage() =》OEMReadData()多实现一个从SD卡读数据来完成。也就是说本来OEMReadData()是实现读PC机上的Image到memory上建立的buffer,换成:读SD卡上的Image到memory上建立的buffer。这种方式不清楚是否可行?现在问题:SD卡是FAT格式,可NK.BIN是写在nand flash BINFS格式的区,不知道这样是否有不妥的地方?还请大家指点下SD卡升级系统的方向,感激不尽。

最新回复

mark  详情 回复 发表于 2010-4-22 15:17
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶一下,呵呵
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用楼主 chinatzar1 的回复:
最近需要做SD卡升级系统。由于是第一次做,又没有人教下思路,所以多是自己在看在想的。
思路:在EBOOT里直接添加这部分功能。跟具体一点是在DownLoadImage() =》OEMReadData()多实现一个从SD卡读数据来完成。也就是说本来OEMReadData()是实现读PC机上的Image到memory上建立的buffer,换成:读SD卡上的Image到memory上建立的buffer。这种方式不清楚是否可行?现在问题:SD卡是FAT格式,可NK.BIN是写在nand flash BINFS格式的区,不知道这样是否有不妥的地方?还请大家指点下SD卡升级系统的方向,感激不尽。

关键问题就是FAT文件的读取,sd卡升级也就是在sd中放个nk文件,再把文件读取出来下载到flash上
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
回xunjingzhpu,关键问题就是FAT文件的读取,能说下这个地方的难点吗?因为我刚接触SD卡这部分.
这两天争取把SD卡裸机下的文件读取完成.
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用楼主 chinatzar1 的回复:
最近需要做SD卡升级系统。由于是第一次做,又没有人教下思路,所以多是自己在看在想的。
思路:在EBOOT里直接添加这部分功能。跟具体一点是在DownLoadImage() =》OEMReadData()多实现一个从SD卡读数据来完成。也就是说本来OEMReadData()是实现读PC机上的Image到memory上建立的buffer,换成:读SD卡上的Image到memory上建立的buffer。这种方式不清楚是否可行?现在问题:SD卡是FAT格式,可NK.BIN是写在nand flash BINFS格式的区,不知道这样是否有不妥的地方?还请大家指点下SD卡升级系统的方向,感激不尽。


对,在OEMReadData里面,加一个分支,读出SD卡的数据,然后在buffer里面,再从buffer存到nand falsh

读卡的时候,加上FAT文件系统的解析,读出来纯数据,就可以直接存储到flash了
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 2 楼 xunjingzhpu 的回复:


关键问题就是FAT文件的读取,sd卡升级也就是在sd中放个nk文件,再把文件读取出来下载到flash上


well done
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 
Eboot中支持SD卡升级主要实现:
1. SD卡接口支持,以便识别SD卡。
2. FAT文件格式支持,以便从SD卡读出镜像文件。
3. SD卡读取数据函数,用以支持升级函数正确的读出数据在RAM中形成有效的镜像数据。

你需要先实现SD卡支持,再了解FAT文件格式。然后才能继续。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
关注中...
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢大家`````
引用 6 楼 shuiyan 的回复:
Eboot中支持SD卡升级主要实现:
2. FAT文件格式支持,以便从SD卡读出镜像文件。

FAT文件格式支持,我不大理解.SD卡不是本来就支持FAT格式的吗?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 4 楼 aaassd_cn 的回复:
读卡的时候,加上FAT文件系统的解析,读出来纯数据,就可以直接存储到flash了

原来还需要解析,本以为直接读写数据就OK了,谢谢了
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 chinatzar1 的回复:
谢谢大家`````
引用 6 楼 shuiyan 的回复:
Eboot中支持SD卡升级主要实现:
2. FAT文件格式支持,以便从SD卡读出镜像文件。

FAT文件格式支持,我不大理解.SD卡不是本来就支持FAT格式的吗?


哎,FAT文件系统仅仅是一种存储方式,可以用在在很多平台上,ucos 裸奔,PC机子
只是复杂程度不同。SD卡升级也使用了它的存储方式而已。
这个FAT文件系统都写好了,楼主只要移植进来就可以用了。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
SD卡一般在经过Windows用户格式化后,才支持FAT/FAT32等格式文件存储。出厂时是裸FLASH,可支持读写,但无文件系统的存在。

具体的看了FAT介绍就知道了。这类研究极其成熟,而且在Windows下随时可以验证、查看,所以熟悉起来很快。比NTFS/ext2之类的方便多了。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 4 楼 aaassd_cn 的回复:

对,在OEMReadData里面,加一个分支,读出SD卡的数据,然后在buffer里面,再从buffer存到nand falsh

读卡的时候,加上FAT文件系统的解析,读出来纯数据,就可以直接存储到flash了

升级系统应该是直接放的NK.bin到SD卡上的吧,也是*.bin的格式放到flash的binfs区.怎么又读出纯数据?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 chinatzar1 的回复:
引用 4 楼 aaassd_cn 的回复:

对,在OEMReadData里面,加一个分支,读出SD卡的数据,然后在buffer里面,再从buffer存到nand falsh

读卡的时候,加上FAT文件系统的解析,读出来纯数据,就可以直接存储到flash了

升级系统应该是直接放的NK.bin到SD卡上的吧,也是*.bin的格式放到flash的binfs区.怎么又读出纯数据?


在sd卡上,nk.bin就是一个普通的文件,和其他文件没有什么不一样,但是fat下有一些其他的数据结构,保存着文件信息,不能当做nk.bin的数据一起存到flash里面,所以我说纯数据
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

15
 
还没搞定关注
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

16
 
关注
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 14 楼 xqhrs232 的回复:
还没搞定关注

由于没有搞过SD卡,对bootloader也只能算是了解,所以速度是慢了些.不够有大家的指点应该会快一点.

现在把SD卡读写在裸机上实现了,开始进行bootloader修改.今天在看eboot downloadimage()下的
BOOL OEMReadData(DWORD dwData,PUCHAR pData)
{
BOOL ret;
if(g_bUSBDownload==FALSE)
{
  ret=EbootEtherReadData(dwData,pData);
}
else
{
  ret=UbootReadData(dwData,pData);
}
return(ret);
}
如果g_bUSBDownLoad==FALSE用的USB方式则执行
BOOL UbootReadData(DWORD cbData, LPBYTE pbData)
{        
           volatile S3C2450_INTR_REG *s2450INT = (S3C2450_INTR_REG *)OALPAtoVA(S3C2450_BASE_REG_PA_INTR, FALSE);       
           UINT8* pbuf = NULL;
        while(1)
        {

                if ((UINT32)g_pDownPt >= readPtIndex + cbData )
                {
                        pbuf = (PVOID)readPtIndex;
                        memcpy((PVOID)pbData, pbuf, cbData);
                        pbuf = (PVOID)OALPAtoUA(readPtIndex);
                        memset(pbuf, 0xff, cbData);
                        readPtIndex += cbData;
                        break;
                }
                else if((UINT32)g_pDownPt == DMABUFFER)
                {
                        /*
                        if (s2450INT->SRCPND & BIT_USBD) s2450INT->SRCPND  = BIT_USBD;
                        if (s2450INT->INTPND & BIT_USBD) s2450INT->INTPND = BIT_USBD;
                        s2450INT->INTMSK &= ~BIT_USBD;                // USB Interrupt enable.
                        */
                }
        }
       
        return TRUE;
}
在UbootReadData()进行只是内存的操作,并没有关系到USB的操作,让我有点不理解
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 chinatzar1 的回复:
引用 14 楼 xqhrs232 的回复:
还没搞定关注

由于没有搞过SD卡,对bootloader也只能算是了解,所以速度是慢了些.不够有大家的指点应该会快一点.

现在把SD卡读写在裸机上实现了,开始进行bootloader修改.今天在看eboot downloadimage()下的
BOOL OEMReadData(DWORD dwData,PUCHAR pData)
{
BOOL ret;
if(g_bUSBDownload==FALSE)
{
? ret=EbootEtherReadData(dwData,pData);
}
else
{
? ret=UbootReadData(dwData,pData);
}
return(ret);
}
如果g_bUSBDownLoad==FALSE用的USB方式则执行
BOOL UbootReadData(DWORD cbData, LPBYTE pbData)
{
? volatile S3C2450_INTR_REG *s2450INT = (S3C2450_INTR_REG *)OALPAtoVA(S3C2450_BASE_REG_PA_INTR, FALSE);
? UINT8* pbuf = NULL;
while(1)
{

if ((UINT32)g_pDownPt >= readPtIndex + cbData )
{
pbuf = (PVOID)readPtIndex;
memcpy((PVOID)pbData, pbuf, cbData);
pbuf = (PVOID)OALPAtoUA(readPtIndex);
memset(pbuf, 0xff, cbData);
readPtIndex += cbData;
break;
}
else if((UINT32)g_pDownPt == DMABUFFER)
{
/*
if (s2450INT->SRCPND & BIT_USBD) s2450INT->SRCPND? = BIT_USBD;
if (s2450INT->INTPND & BIT_USBD) s2450INT->INTPND = BIT_USBD;
s2450INT->INTMSK &= ~BIT_USBD; // USB Interrupt enable.
*/
}
}

return TRUE;
}
在UbootReadData()进行只是内存的操作,并没有关系到USB的操作,让我有点不理解



这部分内容是的确只有内存的操作,原因是USB的操作在其它函数中通过中断方式,已经将USB获取的数据放到了内存中,所以UbootReadData()只需要到那个内存地址读数据就行了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

19
 
谢谢veabol,那我找找USB具体的实现在哪,我想把那些部分改成SD,来完成SDBOOT.
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

20
 
不知道楼主解决的怎么样了?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
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
快速回复 返回顶部 返回列表