Author Topic: SD card works during u-boot, but not after kernel starts (mmc0: error -110 whil)  (Read 357 times)

NickAnde

  • Active Member
  • *
  • Posts: 8
On the Trenz carrier board this works fine (both u-boot and kernel can access the SD card).  However, when booting an almost identical kernel build on our custom I/O carrier board we can not access the SD card once the kernel has been booted.  It can however, boot (via U-boot) from the SD card.  Our custom I/O carrier board routes the SD pins through the FPGA.  We saw some documentation about reducing the frequency Tran Speed from 50000000 down to 20000000 (via device tree configuration).  However, we are unsure if that update has produced any actual changes. 
When booting on the Trenz carrier board, we eventually see the following msgs during kernel boot (excerpt):
(on this h/w it works)
===============
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
mmc0: new high speed SDHC card at address aaaa
can: raw protocol (rev 20120528)
mmcblk0: mmc0:aaaa SL32G 29.7 GiB
can: broadcast manager protocol (rev 20120528 t)
mmcblk0: p1

However, when booting the kernel on our custom I/O carrier board we see the following msgs at around the same boot sequence (excerpt):
This h/w it doesn't work!
=================
mmc0: error -110 whilst initialising SD card
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
....
INIT: version 2.88 booting

mmc0: error -110 whilst initialising SD card
mmc0: error -110 whilst initialising SD card

usb 1-1: new high-speed USB device number 2 using ci_hdrc
mmc0: error -110 whilst initialising SD card

I've attached output from a printenv (U-boot) and the kernel boot sequence.
I've also attached the device tree update with the updated transpeed (which didn't help), and a couple of the linux kernel configs (from the petalinux project):
/subsystems/linux/configs/u-boot/platform-auto.h
/subsystems/linux/configs/u-boot/platform-top.h

Any help on getting our SD card working within the kernel on our carrier I/O card would be most appreciated!


JH

  • Sr. Member
  • ****
  • Posts: 349
Hi,
you should add following to the device tree:
Code: [Select]
&sdhci1 {
    // disable-wp;
    no-1-8-v;
 
};

this should help to fix this issue with some SD Cards.

We have include this to our 2017.4 reference design:

br
John

NickAnde

  • Active Member
  • *
  • Posts: 8
Hey John,
Many thanks for the help... but still not able to get SD 0 working.

I updated my stystem-top.dts to include your suggestion and rebuilt the petallinux project and reloaded both image.ub and boot.bin on device.  ( I didn't do a clean...  but maybe I should have?)
Excerpt of that file looks like this now: (system-top.dts)
&sdhci0 {
   /* clock-frequency = <20000000>; */
   
   /* On the Custom I/O board the SD card is routed thru
      the FPGA fabric, and will only handle a max of 25Mhz
      clock, and is currently configured at 20Mhz, therefore
      restrict the device to the same FPGA configured clock.
      Note: the actual device can handle up to at least 50Mhz. */
   max-frequency = <20000000>; 
};

&sdhci1 {
    // disable-wp;
    no-1-8-v;
 
};

I verified with my FPGA folks that SD 0 is being routed thru the PL.  Just curious if can tell me what those two lines actually do?  Going guess "disable-wp" disables write protect (makes it writable perhaps)?  Not sure what this would do:"no-1-8-v", turns power off perhaps?

In any case the boot sequence looks slightly different but still very similar.  Here is an excerpt around the same time that the SD card should be recognized:
mmc0: error -110 whilst initialising SD card
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
Registering SWP/SWPB emulation handler
/opt/Petalinux/petalinux-v2015.4-final/components/linux-kernel/xlnx-4.0/drivers/rtc/hctosys.c: unable to open rtc devi
ALSA device list:
  No soundcards found.
Freeing unused kernel memory: 10588K (c065d000 - c10b4000)

INIT: version 2.88 booting

mmc0: error -110 whilst initialising SD card
mmc0: error -110 whilst initialising SD card

usb 1-1: new high-speed USB device number 2 using ci_hdrc
mmc0: error -110 whilst initialising SD card
mmc1: MAN_BKOPS_EN bit is not set
mmc1: new high speed MMC card at address 0001
mmcblk0: mmc1:0001 Q2J54A 3.58 GiB
usb-storage 1-1:1.0: USB Mass Storage device detected
mmcblk0boot0: mmc1:0001 Q2J54A partition 1 16.0 MiB
mmcblk0boot1: mmc1:0001 Q2J54A partition 2 16.0 MiB
scsi host0: usb-storage 1-1:1.0
mmcblk0rpmb: mmc1:0001 Q2J54A partition 3 512 KiB
 mmcblk0: p1
Creating /dev/flash/* device nodes

Within the zynq-7000.dtsi file, I see these entries:
      sdhci0: sdhci@e0100000 {
         compatible = "arasan,sdhci-8.9a";
         status = "disabled";
         clock-names = "clk_xin", "clk_ahb";
         clocks = <&clkc 21>, <&clkc 32>;
         interrupt-parent = <&intc>;
         interrupts = <0 24 4>;
         reg = <0xe0100000 0x1000>;
      };

      sdhci1: sdhci@e0101000 {
         compatible = "arasan,sdhci-8.9a";
         status = "disabled";
         clock-names = "clk_xin", "clk_ahb";
         clocks = <&clkc 22>, <&clkc 33>;
         interrupt-parent = <&intc>;
         interrupts = <0 47 4>;
         reg = <0xe0101000 0x1000>;
      };

Wondering if my issue is being cause by this is marked disabled???  It looks the same as my Trenz file so I wouldn't think so but I really have no clue. (pl.dtsi on both platforms is empty)

Any additional recommendations would be most helpful.
Thanks in advance.


JH

  • Sr. Member
  • ****
  • Posts: 349
Hi,

zynq-7000.dtsi is only one files, petalinux generate device tree from different source file. SD will set in the most cases correctly from Petalinux hdf update.
But please answer some questions, so I can easier help:
  • Which module did you use? (At first I thought UltraScale, because I saw the "mmc0: error -110" message only on this devices), but now you wrote "zynq-7000.dts"
  • Which Vivado/SDK/Petalinux Version? --> 2015.4? found this on on of the console outputs.
  • Did you connect SD0 or SD1 --> (depending from the module one is in the most cases connected to eMMC)
  • Did you use SD Levelshifter to connect SD Card? Most 7 Series Module use 1.8V Bank power and Levelshifter to 3.3V for SD.
  • Did you use our Board Bart files or create PS by yourself? What's your PS Settings for SD and Bank Power?
  • Did you try another SD Card (slower Speed Class (ex. 4) and only SD2.0 supported --> they works on the T0808 modules without "no-1-8-v;" device tree entry )
br
John



NickAnde

  • Active Member
  • *
  • Posts: 8
1.   Module we used: zynq-7000 (xc7z020)  I have attached the ps7_init.html as reference as well.
2.   2015.4 Vivado and SDK, Petalinux
3.   As per our FPGA guy, SD0 (on the device that's not working).. not routed at all on Trenz I/O
4.   No level shifter being used, however the FPGA pins being routed directly to SD device using 3.3V LVCMOS.
5.   Did you use our Board Bart files or create PS by yourself? (sorry not sure, but we are using scripts from Trenz for a FPGA build side).  The Bank Power is what voltage stated in question.
6.    Did you try another SD Card (slower Speed Class (ex. 4) and only SD2.0 supported --> they works on the T0808 modules without "no-1-8-v;" device tree entry )?
•   Have tried a couple of cards but no clue what class they are.  But remember, the SD card works fine when u-boot is active (I assuming FPGA is loaded at that time).

Questions I have:
1.   Since we are using SD0, should that device tree update you recommended point to SD0 instead of SD1 (the "no-1-8-v" update)?
2.   Can you tell me what this enables or disables: no-1-8-v;"?

One important thing I found today!!! On the Custom I/O the following file is linked to SD1 address space and I strongly suspect is should be pointing to e0100000 instead!!!
From custom I/O: Listing both mmcblk0 and mmcblk1 but only mmcblk0 shows up!
ls -l /sys/block/mmcblk[0,1]
lrwxrwxrwx    1 root     root             0 Dec 31 18:00 /sys/block/mmcblk0 -> ../devices/soc0/amba/e0101000.sdhci/mmc_host/mmc1/mmc1:0001/block/mmcblk0/

Same command on the Trenz I/O...
ls -l /sys/block/mmcblk[0,1]
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 /sys/block/mmcblk0 -> ../devices/soc0/amba/e0100000.sdhci/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 /sys/block/mmcblk1 -> ../devices/soc0/amba/e0101000.sdhci/mmc_host/mmc1/mmc1:0001/block/mmcblk1
So I am suspecting the device tree somewhere along the line is getting updated and pointing to the wrong address space (SD0 pointing to SD1's address space).  Yet, the device tree within the zyng-7000.dtsi looks correct!  Any clues where this might be getting updated? The only references I see is what is in the zyng-7000.dtsi and system-top.dts files (<PP>/subsystems/linux/configs/device-tree/).

Once again thx in advance!

JH

  • Sr. Member
  • ****
  • Posts: 349
Hi,
to 1. we have different modules with XC7z020:
to 2. You should change to a newer version 2017.4, for example. As long as there's no good reason to stay on this old version.
to 3.,4.,5. I need to now which module you use. on some modules MIO Bank is set fix to 1.8V. I need also to know which MIO you used for SD on PS configuration. If you did not use the same configuration as our defaults. And if you use one of our designs, send me the link to the download please.
6. SD Classes:You questions:
to 1: I need to now, where you connected SD MIOs to SD0 or SD1 Controller on PS. Zynq IC is a variable SoC, which can be customized. So different setup needs different configuration...So I need to know which module you used.

to 2: see for example
BootRom, FSBL, Uboot, Linux... all use different drives. BootROM, FSBL, UBoot use often lower speed. So if it's electrical connected it works in the most cases. If the driver set the wrong speed or think it can't support, it doesn't work.

br
John





NickAnde

  • Active Member
  • *
  • Posts: 8
Additional info (some good news with SD class 4)...
First to answer some of you questions/suggestions:
Module: TE0720-03-2IF  (https://shop.trenz-electronic.de/en/TE0720-03-2IF-Xilinx-Zynq-module-XC7Z020-2CLG484I-ind.-temp.-range-1-Gbyte?c=347)
Upgrading to 2017: Won't happen at this time (budget/time constraints).
MIO bank info:  On the custom I/O we are not using the MIO at all for either SD0 or SD1 controller.  Instead SD0 it is routed via EMIO to FPGA pins which are 3.3 LVCMOS.
SD cards tested today with short summary:

SD class 2, works in u-boot, but gets 110 error during kernel boot
===============================================
(unknown manufacture) 8 Gig, Manufacturer ID:1b, OEM: 534d, SD version 3.0
o   Readable from U-boot
o   Kernel gets errors... boot msgs related to SD (mmc0):
Driver 'mmcblk' needs updating - please use bus_type methods
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
sdhci-arasan e0100000.sdhci: No vmmc regulator found
sdhci-arasan e0100000.sdhci: No vqmmc regulator found
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
sdhci-arasan e0101000.sdhci: No vmmc regulator found
sdhci-arasan e0101000.sdhci: No vqmmc regulator found
mmc1: SDHCI controller on e0101000.sdhci [e0101000.sdhci] using ADMA
mmc0: error -110 whilst initialising SD card


SD class 4 - This one is actually readable from kernel (but readonly)
===============================================
o   ADATA 4 Gig, Manufacturer ID:3, OEM: 5344, SD version 3.0
o   Readable in both u-boot and kernel
o   But comes up in read only in kernel
Driver 'mmcblk' needs updating - please use bus_type methods
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
sdhci-arasan e0100000.sdhci: No vmmc regulator found
sdhci-arasan e0100000.sdhci: No vqmmc regulator found
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
sdhci-arasan e0101000.sdhci: No vmmc regulator found
sdhci-arasan e0101000.sdhci: No vqmmc regulator found
mmc1: SDHCI controller on e0101000.sdhci [e0101000.sdhci] using ADMA
mmc0: new SDHC card at address e624
mmcblk0: mmc0:e624 SU04G 3.69 GiB (ro)
mmcblk0: p1
mount: /dev/mmcblk0p1 is write-protected, mounting read-only

SD class 10
Kingston 8 Gig, Manufacturer ID: 41,OEM: 3432,
======================================
o   Readable from U-boot,
o   Kernel gets errors... boot msgs related to SD (mmc0):
Driver 'mmcblk' needs updating - please use bus_type methods
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
sdhci-arasan e0100000.sdhci: No vmmc regulator found
sdhci-arasan e0100000.sdhci: No vqmmc regulator found
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
sdhci-arasan e0101000.sdhci: No vmmc regulator found
sdhci-arasan e0101000.sdhci: No vqmmc regulator found
mmc1: SDHCI controller on e0101000.sdhci [e0101000.sdhci] using ADMA
mmc0: error -110 whilst initialising SD card

SD class 10
SanDisk Ultra 32 Gig, Manufacturer ID: 3,OEM: 5344
===============================================
o   Unreadable by U-boot! u-boot msgs:
** Can't read partition table on 0:0 **
** Invalid partition 1 **
o   Kernel gets errors... boot msgs related to SD (mmc0):
sdhci: Secure Digital Host Controller Interface driver
Driver 'mmcblk' needs updating - please use bus_type methods
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
sdhci-arasan e0100000.sdhci: No vmmc regulator found
sdhci-arasan e0100000.sdhci: No vqmmc regulator found
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
sdhci-arasan e0101000.sdhci: No vmmc regulator found
sdhci-arasan e0101000.sdhci: No vqmmc regulator found
mmc1: SDHCI controller on e0101000.sdhci [e0101000.sdhci] using ADMA
mmc0: new high speed SDHC card at address aaaa
mmcblk0: mmc0:aaaa SL32G 29.7 GiB (ro)
mmcblk0: error -110 sending status command, retrying

questions:
1) So it does look like SD class 4 is at least readable... can we fix this so it writable as well?
2) Can we fix the others SD classes so they work in the u-boot and kernel as well?

Thanks.

JH

  • Sr. Member
  • ****
  • Posts: 349
Hi,
you tolled speed class. What is supported with SD? SD/SDHC or SDHC-I/SDXC or SDXC-I.

OK you used SD0 to EMIO. I did not understand, why not MIO but that's your choice.
So try:
Code: [Select]
&sdhci0 {
    disable-wp;
    no-1-8-v;
 
--> WP is disabled on SD0 Controle, also 1-8-V limitation (on first email you used this for sd1 -->emmC). If it works depends on your petalinux version (test it or check source code)
Alternative enable WP Pin on PS to EMIO and set correct value. I think should be high to disable write protect (but i'm not 100% sure)

br
John

NickAnde

  • Active Member
  • *
  • Posts: 8
Hey John,
I think if we can get the SD/SDHC (and maybe SDHC-I (but would run at lower speeds), we would be doing well.
I have configured the following and tested with the slower class 4 card: ( it was still readable, but still mounted as read-only):
system-top.dts:
&sdhci0 {
   /* clock-frequency = <20000000>; */

   /* On the Custom I/O board the SD card is routed thru
      the FPGA fabric, and will only handle a max of 25Mhz
      clock, and is currently configured at 20Mhz, therefore
      restrict the device to the same FPGA configured clock.
      Note: the actual device can handle up to at least 50Mhz. */
   max-frequency = <20000000>;
   cap-sd-highspeed;

   // Disable write protect so we can write to the SD card
   disable-wp;

   // SD0 it is routed via EMIO to FPGA pins which are 3.3 LVCMOS...
   no-1-8-v;
};

I added the cap-sd-highspeed in hopes of picking up the class 10 SD cards but really need to get write-enabled working first.  When using the above with the class 4 SD card, the kernel was able to mount the SD card again, but still mounted it as read only.

I have my FPGA quy looking at what is routed for the WP pin to see if that is currently accessible.

Here's another excerpt of the kernel boot console msgs (SD related messages):
Driver 'mmcblk' needs updating - please use bus_type methods
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
sdhci-arasan e0100000.sdhci: No vmmc regulator found
sdhci-arasan e0100000.sdhci: No vqmmc regulator found
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
sdhci-arasan e0101000.sdhci: No vmmc regulator found
sdhci-arasan e0101000.sdhci: No vqmmc regulator found
mmc1: SDHCI controller on e0101000.sdhci [e0101000.sdhci] using ADMA
mmc0: new SDHC card at address e624
mmcblk0: mmc0:e624 SU04G 3.69 GiB (ro)
 mmcblk0: p1
mmc0: tried to reset card
mmcblk0: error -110 sending stop command, original cmd response 0x900, card status 0x800b00
mmcblk0: error -84 transferring data, sector 2176, nr 384, cmd response 0x900, card status 0xb00
mmcblk0: retrying using single block read
mount: /dev/mmcblk0p1 is write-protected, mounting read-only

mount |grep mmc
/dev/mmcblk0p1 on /run/media/mmcblk0p1 type vfat (ro,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)



JH

  • Sr. Member
  • ****
  • Posts: 349
Hi,
maybe device tree entries are not used in this petalinux version. Did you check source?

iIf you route SD to EMIO, WP Pin is also set to EMIO. You should try to set this io constant on PL and regenerate complete design.

br
John

NickAnde

  • Active Member
  • *
  • Posts: 8
John,
I am now able to read and write to the class 4 SD card.  I am seeing a fair amount of errors/warnings when writing to the card, but I'm hoping that might be resolved after trying a "check disk" on the windows platform. (fsck didn't seem to do anything on the device).  So after I spoke with my PL guy, he told me the WP for SD0 is tied high in the build I was using.  After reading the TRM (older one) I thought that tying it high was actually setting the WP and also causing the disable-wp to be ignored.  However, the document 1.7 seemed somewhat unclear.  But luckily the newer Zync-7000 TRM v1.12.1 (page 381) seemed more clear and did imply tying WP high would enable WP on the SD card.  With that in mind, I replaced the "disable-wp", with "wp-inverted" in the device tree and I am now able to write to the SD card.  I need to do some additional testing with the class 4 to see if I can get rid of some the errors I'm seeing when writing.  Again, hopefully a Windows "Check disk" will find something.  Then I plan on testing some of the other cards I would prefer to use (the class 10 cards, which are SD HC, and SD HC(i).  I think with the frequency were using (20Mhz) and 4 wire buss, I will only achieve 10MB/s.  But from what I read, I think the class 10 cards (at least the SD HC) should work.

Question: where would I look for the source code (for example looking for how the "disable-wp" is (or is not) implemented)?  Is that part of the PentaLinux install?

Here's my latest device tree updates: (system-top.dts excerpt):
&sdhci0 {
   /* clock-frequency = <20000000>; */
   //
   /* On the Custom I/O board the SD card is routed thru
      the FPGA fabric, and will only handle a max of 25Mhz
      clock, and is currently configured at 20Mhz, therefore
      restrict the device to the same FPGA configured clock.
      Note: the actual device can handle up to at least 50Mhz. */
   max-frequency = <20000000>;
   cap-sd-highspeed;

   // Disable write protect so we can write to the SD card
   // (Use when no physical  line for WP exists)
   // disable-wp;

   // FPGA (PL) - WP for SD0 is tied high in the angie_ver12a
   // We want SD write enabled therefore invert the Write Protect signal
   wp-inverted;

   // SD0 it is routed via EMIO to FPGA pins which are 3.3 LVCMOS...
   no-1-8-v;
};

Some of the errors I was seeing during writing (hundreds in some cases): (this was during a ftp of the kernel image to the SD card)
mmcblk0: error -110 sending status command, aborting
mmcblk0: error -110 sending status command, retrying
mmcblk0: error -110 sending status command, retrying
mmcblk0: error -110 sending status command, aborting
blk_update_request: 1518 callbacks suppressed
blk_update_request: I/O error, dev mmcblk0, sector 294222
blk_update_request: I/O error, dev mmcblk0, sector 294230
blk_update_request: I/O error, dev mmcblk0, sector 294238
blk_update_request: I/O error, dev mmcblk0, sector 294246
blk_update_request: I/O error, dev mmcblk0, sector 294254
blk_update_request: I/O error, dev mmcblk0, sector 294262
blk_update_request: I/O error, dev mmcblk0, sector 294270
blk_update_request: I/O error, dev mmcblk0, sector 294278
mmcblk0: error -110 sending status command, retrying
mmcblk0: error -110 sending status command, retrying
mmcblk0: error -110 sending status command, aborting
blk_update_request: I/O error, dev mmcblk0, sector 294350
blk_update_request: I/O error, dev mmcblk0, sector 294358
mmcblk0: error -110 sending status command, retrying
mmcblk0: error -110 sending status command, retrying
mmmcblk0: error -110 sending status command, aborting
Buffer I/O error on dev mmcblk0p1, logical block 317, lost async page write
Buffer I/O error on dev mmcblk0p1, logical block 318, lost async page write
Buffer I/O error on dev mmcblk0p1, logical block 319, lost async page write
Buffer I/O error on dev mmcblk0p1, logical block 320, lost async page write
mmcblk0: error -110 sending status command, retrying
mmcblk0: error -110 sending status command, aborting
mmcblk0: error -110 sending status command, retrying
mmcblk0: error -110 sending status command, aborting

Excerpt of kernel boot sequence:
Driver 'mmcblk' needs updating - please use bus_type methods
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
sdhci-arasan e0100000.sdhci: No vmmc regulator found
sdhci-arasan e0100000.sdhci: No vqmmc regulator found
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
sdhci-arasan e0101000.sdhci: No vmmc regulator found
sdhci-arasan e0101000.sdhci: No vqmmc regulator found
mmc1: SDHCI controller on e0101000.sdhci [e0101000.sdhci] using ADMA
...
mmc0: new SDHC card at address e624
mmcblk0: mmc0:e624 SU04G 3.69 GiB
 mmcblk0: p1
...
FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

I'll update as I do more testing, but please reply with any additional recommendation on getting the class 10 SD HC cards working (note: I haven't tested the class 10 cards yet since putting the "cap-sd-highspeed;", but would very much appreciate if you have any additional suggestions to get those cards working)

Thanks in advance again.

JH

  • Sr. Member
  • ****
  • Posts: 349
Hi,

xilinx git hub --> there are tags for every petalinux version. https://github.com/xilinx

Maybe you has still problems because of routing through PL. Did you check this? Did you set correct IO standard and maybe increase IO driver strength.

br
John

NickAnde

  • Active Member
  • *
  • Posts: 8
Some good news: I can use a SD HC class 4 card!!!
 ;D

However, every other type of card is failing in one way or another.  :( A similarly labeled card (SD HC I) class 4 will still have problems (in u-boot and kernel).

So the question at this point can this version of Petalinux (2015.4) support anything but SD HC 4 type cards?

Can you give me any other examples of which type of cards have worked in both u-boot and kernel?
Please specify version of Petalinux any different than 2015.4.
If others are supported and working, can you give me the details of the device tree associated with the sdhci: Secure Digital Host Controller Interface driver


What is really odd about the SD HC I class 4 card that partially works is the following:
  • Unable to read mmc 0:1 partition (fat32) within U-boot
  • However; I am able to read mmc 0:2 partition (ext4) with U-boot
  • In the kernel both partitions are read/writeable and mount r/w, but after writing to either partition (which appears to happen successfully) but later starts displaying lots of errors and no longer appears that it actually wrote to the actual partition.  My guess is the data write is buffered (within RAM) and returns control to the user very quickly, then in the background attempts to write the data to the card, and then eventually fails.

Once again thanks for any help.

Here's a list of cards that I have tested and fail in one manner or another:
  • SD HC class 2      (8 Gig)
  • SD HC class 4   I  (8 Gig)
  • SD HC class 10 I  (8 Gig) (Ultra High Speed 1)
  • SD XC class 10 I  (64 G)

Updates to FPGA:
Increased driver strength for SD from 12 to 16 mA
Have control of both WP and CD via FPGA (defaults set to disable WP and disable CD)
But I don't think either of these updates really affected anything.  That is I suspect the SD HC 4 (vanilla) card would have worked on our previous FPGA versions.
 

JH

  • Sr. Member
  • ****
  • Posts: 349
Hi,

HC I support SD 3.0. I think all cards with higher speed class or which supports 3.0 will not work.

For differences between SD, see again: https://kb-de.sandisk.com/app/answers/detail/a_id/8317/~/sd%2Fsdhc%2Fsdxc-spezifikationen-und-kompatibilit%C3%A4ten#

We did not have this problem, but we use MIO, not EMIO and FPGA Fabric.

Maybe you has a problem with signal quality or the lower speed (your wrote 20MHz) is not supported with this SD? Maybe trace length between controller and your SD Card are to long (some timeout?). I didn't know.

You can also try newer petalinux. Maybe this problems are solve. We have 2017.4 design available on our download ara. Change your SD settings on PS and regenerate the 2017.4 petalinux with your hdf.

For petalinux difference, you must check Xilinx githup : https://github.com/Xilinx

br
John


NickAnde

  • Active Member
  • *
  • Posts: 8
John,

I looked at the github link you pointed me at and didn't see any related updates for SD since 2014.1, (excluding a small DT update for the no-1-8-v which no longer is a concern), therefore I don't think updating a new version is going to help.

Therefore at this point I think we going to do some further testing on the Standard HC class 4 cards and just make sure those are the only cards we use in our device.

Thanks again for the help.