This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335x MMC0 BOOT Problem

Other Parts Discussed in Thread: AM3352

Hello!

I'm using the AM3352 processor in a custom board I designed.

For the time being, I'm struggling with some of the configurations for the boot process. The main objective is for the board to boot from the NAND flash, but I first need to boot it from the SD-Card (MMC0) so that I can use the u-boot to flash the images I use. The problem is that the processor doesn't boot from the MMC0 at all...

I first tried the SYSBOOT 10011b (pins sysboot[0:4]), which will search for the SPL in the NAND->NAND I2C->MMC0->UART0 but without success. Then I changed the configuration for both 00111b (MMC0 as the 2nd in the boot sequence step) and 10111b (MMC0 as the 1st in the boot sequence) and again the processor keeps printing the char 'C' in the UART0, failing to boot.

Then, I noticed I'm using a different voltage for the MMC0, 1.8V instead of 3.3V. I tried to use a SDXC card (it supposedly works in both voltages) but nothing really changed. Just for the sake of testing, I successfully booted an EVM board I have with this card, so there is no issue with it, besides the voltage... Should that be a problem, connecting VDDSHV4 in 1.8V?

My last try was to check in the processor's datasheet the use of the MMC_SDCD pin (it can be any of the pins A13, C15, M17 in package ZCZ) but I can't find any further information regarding the boot sequence and I'm stuck with a board that doesn't boots.

So, my question is how does the processor uses the MMC_SDCD pin, which one does it uses and how it determines that. Is it necessary at all? Am I missing somehing?

I know that using a custom board makes finding the problem a little harder, but if anyone could share some thought on the hole boot process usnig the MMC0 it would REALLY help!

Thanks!

Fernando.

  • Hi Fernando,
     
    The AM335X Technical Reference Manual, Rev.H, Section 26.1.7.5.2 says: "....The ROM Code does not handle the card detection feature on card cage". Are you sure your SD card is prepared correctly?
  • Fernando, you may want to step thru the details outlined here:  http://processors.wiki.ti.com/index.php/AM335x_board_bringup_tips

    to to help you get your board booting.  If you have further questions, please post them here.

    Thanks,

    James

  • Yes, it does boot the EVM properly. I used the create-sdcard.sh script to format the sd-card. Again, I'm using a SDXC model.

  • if you can post a schematics of you sd card to am3352, will help a lot.

    meantime you can see if your SD card CLK pin has signal?

  • James: I read the Boot sequence topic on the link and I'm moving now to check the disassembly via JTAG and see where the ROM code is failing. All the previous conditions are being met...

    Cao: As I work for a private company, I can't just update a copy of the schematics. The CLK pin is regularly trying to communicate with the SD-Card in 1.8V level, but for some reason nothing else happens.

  • ok the schematics should be very simple, and similar design, i cannot help without knowing if you made a mistake on hardware design...

  • There are a lot of things that could be going wrong here. With such little information being provided, we can only guess, and leave it to the OP to work it out.

    First off, the SD cards don't run from 1.8V. The new high-speed cards will initialise at 3.3V, then go through a negotiation process to drop down to 1.8V if it's agreed that both ends can handle it. So it's quite possible that running the card from only 1.8V is causing some difficulties. That's the first thing I would change.

    You don't show the schematics, so we can't see what else is wrong. Do you have pull-ups on the signals? Is the clock line terminated? Are the traces really long, or are they short? Is there noise on the signals? Is the SD card socket wired correctly?  (Every socket seems to be different from my experience.) Do you have sufficient decoupling capacitance? And so forth.

    It's good to hear that same card will boot in an EVM board - at least you can rule out the card & the files on it.

    Good luck!

  • I will try to explain the circuit as well as I can: the microSD slot is somewhat close to the processor and this should not be a problem, there is not a perceptible noise on the bus. Every signal have a pull up resistor of 10K connected to it. The clock signal is present, but as the card doesn't respond the communication never succeeds. The circuit is similar to the EVM or the BeagleBone's design.

    So, I made some changes on the board after reading this document from the SD Association (specially the section 4.2.2).

    The source voltage applied for the memories we use is 1.8V (NAND flash, RAM DDR2 and SDCard) due to a recomendation somewhere in the specifications we read. That being said, we can not change the voltage source for the VDDSHV4 domain.

    To change that, I isoleted the the voltage for all the pull up resistors and changed it from 1.8V to 3.3V. This was intended to be only a test because of all the implications this change could imply. But, for some reason, a regular microSD HS card was able to communicate with the processor and the UART started printing the SPL informations, even though it would not load the u-boot image to the RAM we use. Note that the pins in the processor are still varying in the range 0~1.8V - there is a current of 180uA in each pin of the microSD card.

    After that, I tryed booting the processor with the SDXC card I have. To my surprise, this time everything worked, meaning even the Kernel is running.

    As I said in the first message, my goal is to use the NAND flash we have to store the images and boot the board. The circuit for the SDCard will be remade in the next board revision and this won't be an issue anymore.

    Anyhow, my imediate problem is solved and right now I'm just confused: why would the circuit work after solely changing the pull up voltage and why it works only with the SDXC card?

    Thanks.

    Fernando

  • From your description above, it sounds like you are powering the respective MMC IO buffers in the VDDSHV4 domain with 1.8 volts and pulling the signals high with a 3.3 volt power source.  Is this correct?  If so, you are violating the maximum input voltage to these IO terminals.  See the "Steady State Max. Voltage at all IO pins" parameter in the Absolute Maximum Ratings section of the AM335x data sheet.

    Regards,
    Paul

  • Anyhow, my imediate problem is solved and right now I'm just confused: why would the circuit work after solely changing the pull up voltage and why it works only with the SDXC card?


    Because you were "phantom powering" the card with 3.3V via its pull-up resistors. This can happen with a low-power device; it consumes little enough current that the voltage drop across the resistors (V=IR) is low enough to allow the IC to run. It's not a healthy thing to do long-term, but it's an excellent test that gives you confidence what the real problem is.

  • Paul, this is a temporary solution. We are well aware that changing the pull up voltage generates an unwanted current and violates the voltage level in the IO pins.

    Regards, 

    Fernando.