Background:
SDHC controller of i.MX6 Ultra Lite requires tuning in SDR50 mode. Tuning gets successful when card is in SDR50 operating at 66 MHz. It doesn't work for me at 100 MHz (I'm working on proprietary driver). Tuning procedure i am using is as follows.
1. Enable Standard Tuning Enable bit (24th bit of Tuning Control Register)
2. Enable Execute Tuning (22nd bit of Auto CMD12 Error Status)
3. Execute CMD19
4. Read Execute Tuning bit. If it is 1, goto step 3 else step 5.
5. Read Sample Clock Select (23rd bit of Auto CMD12 Error Status). If it is 1, tuning is successful, else failed.
I also have consulted linux driver, it selects the card mode according to following priority.
SDR104
DDR50
SDR50
The card I have supports DDR50/SDR50. So, linux selects DDR50 by default. It needs modification before mmc driver can be forced to select SDR50 mode.
Please note that I am using standard SD Slot on daughter board of imx6ul evk which supports SD 3.0
Question:
Is SDR50 tuning tested for imx6 eval kit?. If yes, what was the achieved throughput? Am I missing something in tuning?
Hi waqasmazhar
regarding " It doesn't work for me at 100 MHz", please note that
104MB/s is possible only if host supports SDR104 mode and card is UHS104 Card
(supports SDR104 mode). If card is a UHS50 Card or if host doesn't support SDR104 mode,
performance is limited to 50MB/s (SDR104 mode cannot be used). This is described
in SD specification sect.3.9.3 UHS-I Host and Card Combination, check for example
https://www.sdcard.org/downloads/pls/pdf/part1_410.pdf
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Thanks for your reply,
Please note that you are mixing two different things here.
Max throughput of SDR50 is 50MB/sec. Clock speed at which this throughput is achievable is 100 MHz.
Max throughput of SDR104 is 104MB/sec. Clock speed at which this throughput is achievable is 208 MHz.
Max throughput of DDR50 is 50 MB/sec. Clock speed at which this throughput is achievable is 50 MHz.
according to my docs SD 3.0 DDR50,SDR104 were tested on i.MX6UL EVK,
so SDR50 should work too.
I'm sorry but I'm unable to understand your point. Will you please elaborate?
UHS50 card having SDR50 mode should work on 100 MHz according to SD Specifications Part 1 Physical Layer Specification Version 3.01 Page 32 Section 3.9.1. Because for SDR50, 50 MB/sec can only be achieved at 100 MHz.
SDR stands for single data rate. It reads or write only on rising edge of clock. So to achieve 50 MB/sec, I would need 100 MHz clock.
DDR stands for Dual Data Rate. It reads or write on rising and falling edge of clock. So to get 50 MB/sec, I would need 50MHz.
Source: https://members.sdcard.org/press/events/SD_Standards_and_Technology_GWTaipei_Oct2014.pdf Page 7
Mistake I was making has been figured out. I was changing bus width after switching to SDR50 which is wrong. After making bus width switch before switching to SDR50 makes tuning successful.
Thanks for your help
does your card support UHS-I, how many cards were tested ?