引用: 引用楼主 chinatzar1 的回复:
最近需要做SD卡升级系统。由于是第一次做,又没有人教下思路,所以多是自己在看在想的。
思路:在EBOOT里直接添加这部分功能。跟具体一点是在DownLoadImage() =》OEMReadData()多实现一个从SD卡读数据来完成。也就是说本来OEMReadData()是实现读PC机上的Image到memory上建立的buffer,换成:读SD卡上的Image到memory上建立的buffer。这种方式不清楚是否可行?现在问题:SD卡是FAT格式,可NK.BIN是写在nand flash BINFS格式的区,不知道这样是否有不妥的地方?还请大家指点下SD卡升级系统的方向,感激不尽。
引用: 引用楼主 chinatzar1 的回复:
最近需要做SD卡升级系统。由于是第一次做,又没有人教下思路,所以多是自己在看在想的。
思路:在EBOOT里直接添加这部分功能。跟具体一点是在DownLoadImage() =》OEMReadData()多实现一个从SD卡读数据来完成。也就是说本来OEMReadData()是实现读PC机上的Image到memory上建立的buffer,换成:读SD卡上的Image到memory上建立的buffer。这种方式不清楚是否可行?现在问题:SD卡是FAT格式,可NK.BIN是写在nand flash BINFS格式的区,不知道这样是否有不妥的地方?还请大家指点下SD卡升级系统的方向,感激不尽。
引用: 引用 2 楼 xunjingzhpu 的回复:
关键问题就是FAT文件的读取,sd卡升级也就是在sd中放个nk文件,再把文件读取出来下载到flash上
引用: 引用 6 楼 shuiyan 的回复:
Eboot中支持SD卡升级主要实现:
2. FAT文件格式支持,以便从SD卡读出镜像文件。
引用: 引用 4 楼 aaassd_cn 的回复:
读卡的时候,加上FAT文件系统的解析,读出来纯数据,就可以直接存储到flash了
引用: 引用 8 楼 chinatzar1 的回复:
谢谢大家`````
引用 6 楼 shuiyan 的回复:
Eboot中支持SD卡升级主要实现:
2. FAT文件格式支持,以便从SD卡读出镜像文件。
FAT文件格式支持,我不大理解.SD卡不是本来就支持FAT格式的吗?
引用: 引用 4 楼 aaassd_cn 的回复:
对,在OEMReadData里面,加一个分支,读出SD卡的数据,然后在buffer里面,再从buffer存到nand falsh
读卡的时候,加上FAT文件系统的解析,读出来纯数据,就可以直接存储到flash了
引用: 引用 12 楼 chinatzar1 的回复:
引用 4 楼 aaassd_cn 的回复:
对,在OEMReadData里面,加一个分支,读出SD卡的数据,然后在buffer里面,再从buffer存到nand falsh
读卡的时候,加上FAT文件系统的解析,读出来纯数据,就可以直接存储到flash了
升级系统应该是直接放的NK.bin到SD卡上的吧,也是*.bin的格式放到flash的binfs区.怎么又读出纯数据?
引用: 引用 14 楼 xqhrs232 的回复:
还没搞定关注
引用: 引用 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的操作,让我有点不理解