Drive Strength modification for SD interface Jetson Nano

Hi.

For the purpose of RE testing, we intend to modify rise time and fall time of the SD card (sdmmc3) interface in Jetson Nano. For the same, I modified pull up and pull down entries in tegra210-pinmux-drive-sdmmc-common.dtsi file.

Modifying the values had little effect on the rise/fall time. With reference to this link, the values specified in pull-down-strength and pull-up-strength fields are offsets and can be changed to increase or decrease rise/fall time.

My queries regarding this are described below.

  1. What is the offset range for increasing and decreasing the drive strength for the pins:

     sdmmc3_drv_code_1_8V: sdmmc3_drv_code {
     	sdmmc3 {
     		nvidia,pins = "drive_sdmmc3";
     		nvidia,pull-down-strength = <21>;
     		nvidia,pull-up-strength = <17>;
    

}

and
sdmmc3_default_drv_code_3_3V: sdmmc3_default_drv_code {
sdmmc3 {
nvidia,pins = “drive_sdmmc3”;
nvidia,pull-down-strength = <18>;
nvidia,pull-up-strength = <18>;
}

  1. Is this offset range same for all pins whose drive strength can be modified?

  2. Will changing pull-down-strength or pull-up-strength values alone be sufficient or any other parameters must also be changed?

hello yeshwanth.vn,

there’re 1-15 with its offsets, it’s using the hex values to tweak the drive strength.
please see-also Topic 202947 for the drive strength ranges.
thanks

@JerryChang thanks for your response.

Does this range apply to all pins or will there be a variation (more specifically to the pins associated with sdmmc3) ? Also please tell me if changing pull-up/pull-down strength properties alone would be sufficient to see any visible changes in rise time/fall time.

@JerryChang I tried varying the offsets, rise/fall time still hasn’t changed. Please tell me the exact procedure to properly modify the drive strength values.

hello yeshwanth.vn,

are you going to modify driver strength manually? may I know what’s the actual use-case.
there’s an auto-calibration circuit to determine the optimal slew rates for the SDMMC signals. please also check TRM, you may searching for [Run Auto-Calibration] in the SD/MMC controller session.
thanks

Hi @JerryChang

We are testing our boards for emission levels and as a part of this we need rise and fall times of SD interface to be as long as possible.

From your suggestion, we were able to increase the pull-up time by setting SDHCI_AUTO_CAL_PUPD_OFFSETS macro to 0x7f70 from 0x7f7f. This is with auto calibration enabled.

When I set the macro’s value to 0x7070, I expected the pull down time also to increase. Instead there was no changes in pull down time and the pull-up time also got decreased.

Let me know if this the right way and if I am missing something in this. L4T version is 32.4.4.

Also please let me know how to properly disable auto-calibration. Are there any device tree settings/patches for the same?

Thanks.

Hi,

Auto calibration will be done with the prod configuration setting in the device tree.

And the kernel driver code is in this path.

kernel/kernel-4.9/drivers/mmc/host/sdhci-tegra.c

sdhci_tegra_probe is the start point of this function.

Also, I am not sure why you want to change rise/fall time. Does our default setting have any violation?

@WayneWWW In an attempt to minimize the EMI violations caused due to SD signals, we are trying to reduce the drive strength (or increase the rise/fall times) to reduce the intensity of the harmonics in the signals. Unfortunately, we do not have series termination resistors in the board to achieve this effect through resistor value change.

Hence we are looking for solutions where we would be able to adjust the drive strength as per our needs.

Hi,

Please refer to TX1 TRM and the register SDMMCA_AUTO_CAL_CONFIG_0

Do auto calibration and use the offsets to tweak the final codes we send to pads using:-
You can program the PU_OFFSET to -1 or -2 and check that your AUTO_CAL_PULLUP_ADJ value is less than AUTO_CAL_PULLUP by PU_OFFSET. Keep on reducing this offset value until you come within your desired value

AUTO_CAL_PULLUP_ADJ = AUTO_CAL_PULLUP (from auto-cal) + AUTO_CAL_PU_OFFSET

AUTO_CAL_START bit needs to be set as well,in order to trigger the auto calibration engine.

Please check if the status(SDMMCA_AUTO_CAL_STATUS_0) has changed

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.