On Fri, Mar 11, 2011 at 12:59 AM, Raffaele Recalcati <lamiapost...@gmail.com> wrote: > On Thu, Mar 10, 2011 at 5:29 PM, Lei Wen <adrian.w...@gmail.com> wrote: >> Hi Raffaele, >> >> On Thu, Mar 10, 2011 at 11:43 PM, Raffaele Recalcati >> <lamiapost...@gmail.com> wrote: >>> From: Raffaele Recalcati <raffaele.recalc...@bticino.it> >>> >>> The first SEND_OP_COND (CMD1) is used only to ask card capabilities, waiting >>> that the card is not busy. >>> After it, an AND operation is done between card capabilities and host >>> capabilities, (at the moment only for the voltage field). >>> Finally the correct value is sent to the MMC. >>> >>> Signed-off-by: Raffaele Recalcati <raffaele.recalc...@bticino.it> >>> --- >>> drivers/mmc/mmc.c | 21 +++++++++++++++++++-- >>> include/mmc.h | 2 ++ >>> 2 files changed, 21 insertions(+), 2 deletions(-) >>> >>> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c >>> index 042653f..ded630b 100644 >>> --- a/drivers/mmc/mmc.c >>> +++ b/drivers/mmc/mmc.c >>> @@ -347,17 +347,34 @@ sd_send_op_cond(struct mmc *mmc) >>> >>> int mmc_send_op_cond(struct mmc *mmc) >>> { >>> - int timeout = 1000; >>> + int timeout = 10000; >>> struct mmc_cmd cmd; >>> int err; >>> >>> /* Some cards seem to need this */ >>> mmc_go_idle(mmc); >>> >>> + /* Asking to the card its capabilities */ >>> + do { >>> + cmd.cmdidx = MMC_CMD_SEND_OP_COND; >>> + cmd.resp_type = MMC_RSP_R3; >>> + cmd.cmdarg = 0; >>> + cmd.flags = 0; >>> + >>> + err = mmc_send_cmd(mmc, &cmd, NULL); >>> + >>> + if (err) >>> + return err; >>> + >>> + udelay(1000); >>> + } while (!(cmd.response[0] & OCR_BUSY) && timeout--); >> >> I think you should not put the first probe a multi-time. In linux framework, >> it would skip the first probing. >> >> I test with this patch and fail to detect my emmc card... >> While just let the first probe once, it works fine. >> >> Best regards, >> Lei >> > > Look at JEDEC Standard No. 84-A441 document at page 190. > It is normal to ask the card capabilities before setting. > But I understand also that in your case there is some issue. > I'm sorry, what does "multi-time" mean? >
I mean on my board I cannot get (!(cmd.response[0] & OCR_BUSY) to be true for the first MMC_CMD_SEND_OP_COND until its timeout, which lead to card init fail. Best regards, Lei _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot