请chinesedragon2010朋友进来领分

zengwujun 2010-09-16 02:29:23
非常感谢你wince sd升级的代码,可能也会有一些问题需要请教你,谢谢(第一次做wince)。
zwj123◎163.com。
...全文
162 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinesedragon2010 2010-09-17
  • 打赏
  • 举报
回复
怎么解决的啊?可以麻烦楼主分享一下吗?我也想学习一下!谢谢啊
zengwujun 2010-09-17
  • 打赏
  • 举报
回复
问题解了,初始化没有问题。
jw212 2010-09-17
  • 打赏
  • 举报
回复
大家互相交流,共同学习!
IT铁哥 2010-09-16
  • 打赏
  • 举报
回复
看到这样的贴我有点感动.
CSDN上热心的人还是很多的.
chinesedragon2010 2010-09-16
  • 打赏
  • 举报
回复
对zengwujun说声抱歉,我上面提到的想法的第3点说的太直了,忘见谅,我只是觉得自己在这个问题上给你提供的帮助有限,感觉受之有愧,假如有其他朋友能给你很好的建议和帮助,你可以把这100分给他们,祝很快移植成功啊!
chinesedragon2010 2010-09-16
  • 打赏
  • 举报
回复
我有几个想法:
1.我已把WINCE6.0+2443系统的基于SD卡的更新的eboot已发给你了,我建议你如果时间允许,你可以先学习
学习这个eboot,搞懂了再移植到你的WINCE6.0+6410上面,不过,我现在还不知道2443和6410的SD控制器的差别有多大,移植的工作量和难点主要是在eboot中的sd.c文件中。

2.我发给你的那个WINCE6.0+6410的SD卡更新的bootloader是三星原厂的BSP包中的,我还没有验证过是否可行,但我现在发现好像不是SD更新的。

3.只要其他朋友能给你很好的建议和帮助,我希望你给予他们应有的分数表示他们对你的帮助,其实我在这个问题上并没有给你很大的帮助,主要是靠你看懂然后去移植,当然了,在移植过程中,欢迎交流,我也有很多不懂的,互相学习。
chinesedragon2010 2010-09-16
  • 打赏
  • 举报
回复
好啊,你都开始用6410了,我还没有真正开始学习6410呢?你那里没有wince 6410的BSP包吗?
zengwujun 2010-09-16
  • 打赏
  • 举报
回复
int hsmmc_init (void)
{
u32 reg;
uint width;

width = 4;

EdbgOutputDebugString("[HSMMC]++hsmmc_init");

pCLKPWR = (S3C6410_SYSCON_REG*)OALPAtoVA(S3C6410_BASE_REG_PA_SYSCON, FALSE);
pGPIOReg = (S3C6410_GPIO_REG*)OALPAtoVA(S3C6410_BASE_REG_PA_GPIO, FALSE);
pHSMMC = (S3C6410_HSMMC_REG*)OALPAtoVA(S3C6410_BASE_REG_PA_HSMMC0, FALSE);

//reset
pHSMMC->SWRST = 0x3;

//InitClkPwr
pCLKPWR->OTHERS |= (0x1<<16); // set USB_SIG_MASK
pCLKPWR->HCLK_GATE |= (0x1<<17); // Gating HCLK for HSMMC1
pCLKPWR->SCLK_GATE |= (0x1<<27); // Gating special clock for HSMMC1 (SCLK_MMC1_48)

//InitGPIO
pGPIOReg->GPGCON = (pGPIOReg->GPGCON & ~(0xFFFFFF)) | (0x222222); // 4'b0010 for the MMC 0
pGPIOReg->GPGPUD &= ~(0xFFF); // Pull-up/down disabled

//InitHSMMC
pHSMMC->CONTROL2 = (pHSMMC->CONTROL2 & ~(0xffffffff)) |
(0x3<<9) | // Debounce Filter Count 0x3=64 iSDCLK
(0x1<<8) | // SDCLK Hold Enable
(0x3<<4); // Base Clock Source = External Clock

hsmmc_clock_onoff(0);
set_clock(SD_EPLL, 0x80);
pHSMMC->TIMEOUTCON = 0xe;
set_hostctl_speed(NORMAL);

InterruptEnable(0xff, 0xff);

dbg("HM_NORINTSTS = %x\n", pHSMMC->NORINTSTS);

/* MMC_GO_IDLE_STATE */
issue_command(MMC_GO_IDLE_STATE, 0x00, 0, 0);

ocr_check = 1;

if (set_mmc_ocr()) {
mmc_card = 1;
dbg("MMC card is detected\n");
} else if (set_sd_ocr()) {
mmc_card = 0;
dbg("SD card is detected\n");
} else {
EdbgOutputDebugString("0 MB\n");
return 0;
}

ocr_check = 0;

/* Check the attached card and place the card
* in the IDENT state rHM_RSPREG0
*/
issue_command(MMC_ALL_SEND_CID, 0, 0, MMC_RSP_R2);

/* Manufacturer ID */
card_mid = (pHSMMC->RSPREG3 >> 16) & 0xFF;

dbg("Product Name, RSPREG2:%X,RSPREG1:%X\n", pHSMMC->RSPREG2, pHSMMC->RSPREG1);

// Send RCA(Relative Card Address). It places the card in the STBY state
rca = (mmc_card) ? 0x0001 : 0x0000;
issue_command(MMC_SET_RELATIVE_ADDR, rca<<16, 0, MMC_RSP_R1);

if (!mmc_card)
rca = (pHSMMC->RSPREG0 >> 16) & 0xFFFF;

dbg("Enter to the Stand-by State\n");

issue_command(MMC_SEND_CSD, rca<<16, 0, MMC_RSP_R2);

if (mmc_card) {
mmc_spec = (pHSMMC->RSPREG3 >> 18) & 0xF;
dbg("mmc_spec=%d\n", mmc_spec);
}

issue_command(MMC_SELECT_CARD, rca<<16, 0, MMC_RSP_R1);
dbg("Enter to the Transfer State\n");

display_card_info();

/* Operating Clock setting */
clock_config(SD_EPLL, 2); // Divisor 1 = Base clk /2 ,Divisor 2 = Base clk /4, Divisor 4 = Base clk /8 ...

while (set_bus_width(width));
while (!check_card_status());

/* MMC_SET_BLOCKLEN */
while (!issue_command(MMC_SET_BLOCKLEN, 512, 0, MMC_RSP_R1));

pHSMMC->NORINTSTS = 0xffff;

EdbgOutputDebugString("[HSMMC]--hsmmc_init");

return 0;
}

初始化有问题吗,我是从linux挪过来的。
zengwujun 2010-09-16
  • 打赏
  • 举报
回复
是的,加我QQ:23607128
chinesedragon2010 2010-09-16
  • 打赏
  • 举报
回复
^_^,你的系统现在可以使用SD卡来更新了吗?还存在什么问题啊?欢迎交流!

19,519

社区成员

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

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