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 custom board- Booting issue

Hi all,

I am facing a problem with sd-card booting on our am335x custom board, the board is not booting from sd-card.

Two times the board booted and we were able to get android console, but now we are only getting CCCCC on the console port.

We checked the sys_boot signals and they are correct for mmc booting.

The sd-card used is class4 and the same sdcard and image is working on another board.

The schematics used is attached here. the mmc pins shows required voltage levels. The mmc0_clk signal is 3.3v and only shows clock signal for a short period when reset button is pressed.

Could anyone give some points to proceed further.

Regards,

Ebin

 

  • Hi Ebin,
     
    Try removing the pullup resistor on MMC0_CLK (R4), and replace R81 with 22Ohm. R81 should be placed close to the processor pin.
  • Hi Biser,

    I replaced the sd-card connector on the board just to check any soldering problem. Now board is booting up till android home screen and gets stuck with error messages on console.

    The sd-card is getting corrupted everytime, when inserted in pc it shows no partition tables.

    I will try the hardware changes you mentioned, but could  there be any other problem causing this issue? because our reference design board uses the same schematics and is working. 

    Logmessage on console-

    [   16.858764] warning: `zygote' uses 32-bit capabilities (legacy support in use)
    [   20.903259] request_suspend_state: wakeup (3->0) at 20900758415 (2000-01-01 00:00:20.556406484 UTC)
    [   21.543975] acc_open
    [   21.549865] acc_release
    root@android:/ # [   61.020538] mmcblk0: error -84 transferring data, sector 211385, nr 128, cmd response 0x900, card status 0x800b00
    [   61.031768] mmcblk0: retrying using single block read
    [   63.627227] mmcblk0: timed out sending r/w cmd command, card status 0x800900
    [   63.634765] mmcblk0: command error, retrying timeout
    [   65.831115] mmcblk0: timed out sending r/w cmd command, card status 0x800900
    [   65.838623] mmcblk0: command error, retrying timeout
    [   68.034790] mmcblk0: timed out sending r/w cmd command, card status 0x800900


    [   70.342163] end_request: I/O error, dev mmcblk0, sector 211481
    [   70.348266] end_request: I/O error, dev mmcblk0, sector 211489
    [   70.354339] end_request: I/O error, dev mmcblk0, sector 211497
    [   70.360443] end_request: I/O error, dev mmcblk0, sector 211505
    [   70.372161] mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x800d00
    [   71.477966] mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x800b00
    [   71.487884] mmcblk0: error -84 transferring data, sector 211177, nr 64, cmd response 0x900, card status 0xb00
    [   71.498535] mmcblk0: retrying using single block read
    [   71.510437] mmcblk0: timed out sending r/w cmd command, card status 0x800900

    [   71.540405] mmcblk0: command error, retrying timeout
    [   71.550964] mmcblk0: timed out sending r/w cmd command, card status 0x800900
    [   71.558410] mmcblk0: command error, retrying timeout
    [   71.565093] mmcblk0: timed out sending r/w cmd command, card status 0x800900

    [   73.846405] mmcblk0: command error, retrying timeout
    [   73.852874] mmcblk0: timed out sending r/w cmd command, card status 0x800900

    [   73.913879] mmcblk0: command error, retrying timeout
    [   73.919128] end_request: I/O error, dev mmcblk0, sector 211263

    [   73.974334] end_request: I/O error, dev mmcblk0, sector 211329
    [   73.980468] end_request: I/O error, dev mmcblk0, sector 211337

    [   76.216003] mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x800b00
    [   77.328002] mmcblk0: error -110 sending status command, retrying

    [   82.390502] end_request: I/O error, dev mmcblk0, sector 233369
    [   82.396636] end_request: I/O error, dev mmcblk0, sector 233377
    [   82.402770] Buffer I/O error on device mmcblk0p2, logical block 11084
    [   82.504425] Buffer I/O error on device mmcblk0p2, logical block 11099
    [   82.511199] EXT4-fs warning (device mmcblk0p2): ext4_end_bio:244: I/O error writing to inode 16437 (offset 311296 size 69632 starting block 29173)
    [   89.714660] mmcblk0: error -110 sending status command, retrying
    [   89.721069] mmcblk0: error -110 transferring data, sector 233769, nr 128, cmd response 0x900, card status 0x800c00
    [   89.732299] end_request: I/O error, dev mmcblk0, sector 233774

    Regards,

    Ebin

  • It seems that your MMC interface is not working properly. Are these long tracks on the PCB, or too close to each other?
  • Hi Biser,

    The tracks are placed close to each other.

    Regards,

    Ebin

  • You may have cross-talk issues there. How long are the tracks and what is the spacing?
  • Hi Biser,

    The tracks are approx. 50mm long and spacing 8mils.

    Regards,

    Ebin

  • They are not too long, maybe a bit too close to each other. Did you try what I suggested above (adding a serial resistor and removing the pullup on the clock line)?
  • Hi Biser,

    I tried the method you suggested but it didn't work.

    One time it booted and got stuck, now its not booting from sdcard ,only CCCC characters on console port.

    Regards,

    Ebin

  • Ebin,
     
    I think that there may be other issues on your board that cause this erratic behaviour. Have you checked here: http://processors.wiki.ti.com/index.php/AM335x_Schematic_Checklist.
  • I have this issue too! 25% of my 20 custom made board exhibit this issue:

    [ 2.776885] omap_rtc am33xx-rtc: setting system clock to 2013-06-25 08:42:04 UTC (1372149724)

    [ 2.804443] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
    [ 2.813018] VFS: Mounted root (ext4 filesystem) on device 179:2.
    [ 2.819793] Freeing init memory: 348K
    [ 5.984130] mmcblk0: error -110 transferring data, sector 4319616, nr 128, cmd response 0x900, card status 0x80b00
    [ 5.995361] mmcblk0: retrying using single block read

    ...

    and fail to boot, you are not the only one out there. I do suspect it could be an am335x chip issue. or related issue

    I have changed pullup and various methods, same results.

  • BTW this card is perfectly fine with another custom board i made, and perfectly fine with a pc read reader, and 100% usable.

  • I can assure you that there is no "chip issue" with the AM335X where booting from SD card is concerned.
  • You may need to adjust R81 (the series resistor on MMC_CLK) in your design.  First, this resistor should be as close to the AM335x as possible.  I would probe this signal (on the processor side of the resistor) during SD transactions to see if there are any signs of reflections.  If you see any discontinuities on either the falling or rising edge of the clock, especially around the mid level voltage threshold, you need to adjust the value of the resistor to remove these.  Typically, values in the range of 20-50 ohms should clean this up.  You may need to experiment with a few different resistor values to get optimal results. 

    Regards,

    James

  • I do have my MMC_CLK resistor 22 Ohm (R81). I don't see 0 Ohm and 22 Ohm made any difference.

    Anyway to lowering the MMC0 CLK speed. i.e. lowering SD card speed (linux 3.2.0 kernel) ? I need to make sure my products are error free.

  • I really don't think  you can "assure", as large members of community of beaglebone still face the same issue:

    https://groups.google.com/forum/#!msg/beagleboard/bPMNZ0Qz-rg/q9NaOMaJ51sJ

    I still struggle with the problem everyday, have already ordered 50k chips... 

  • It may be necessary to verify signal integrity and timing relationships of the signals with a high speed scope and active FET probes to capture what is causing data corruption.

    Do you have a multi-channel oscilloscope that can be used to monitor the signals?  If so, connect one channel to the clock signal and the other channel(s) to one or more data signals.  You may need to capture multiple scope shots while observing each data signal since most scopes do not have enough channels to capture all the signals at the same time.  The goal is to observe the timing relationship and signal quality of the clock and all data signals during read and write operations.

    Hopefully the PCB design has Vias or other probe points near each end of the signal traces so signal quality can be observed as close as possible to each device.  Since AM335x is sourcing the clock to the respective terminal and looping it back into MMCHS via the I/O buffer it is very important to observe the clock signal as close as possible to the AM335x device using a high speed scope and probe to determine if the signal is non-monotonic during the clock rise and fall. 

    The series termination resistor needs to be placed very close to the AM335x terminal to be effective.  You may also want to increase the value and see if this helps.  22 ohms may not be high enough to eliminate signal distortion on the AM335x clock terminal. 

    Regards,
    Paul

  • Thanks for your reply, I did try this, but  my 100MHz oscilloscope isn't able to capture it well enough.  the signal is very ugly, and far from square waves.

  • Cao Yiling,

    Based on your last post, it sounds like you have signal integrity issues that need to be resolved.

    Regards,
    Paul