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.

AM6442: Does MMC1 controller support Wifi SDIO devices ?

Part Number: AM6442


Hello at TI experts!

I wonder if the MMC1 controller of the AM6442 support Wifi SDIO devices (hardware and software question of course !)

Im' trying to use such device on TMDS64GPEVM and Sk-AM64 board : both have SDCard slot on MMC1 and I'm using this slot to connect a SDIO Wifi controller. I don't manage to get it working, it usually don't pass the initialization stage.

I'm asking this question because I know MMC0 for example is not compatible with SDIO (see datasheet and also https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1031005/am6442-mmc0-and-mmc1-supported-modes), and would like to have the details about MMC1 features on this specific topic.

Note: SK-AM64 has Wifi SDIO device on MMC0 so I really wonder about the specifications, this is supposed to not work on this board !!! The datasheet clearly indicates SDIO is NOT supported on MMC0.

Thanks,

Joel

  • There are slight timing differences between the eMMC standard and the SDIO/SD Card standard. We were not able to close timing on MMC0 such that it would meet both standards, so we descoped SD Card support from MMC0.

    The hardware development team was ask to include the Wifi SDIO device in their design to showcase the Wifi SDIO device and provide a software development platform. They found it was possible to get this specific Wifi SDIO device to work on MMC0 with a specific PCB implementation after performing a timing analysis that included actual timing parameters from each device and actual PCB trace delays. They may have adjusted trace lengths to optimize timing margin.

    MMC0 may work with some SDIO devices, but it is your responsibility to design a system that does not violate timing requirements of either device. 

    Note: MMC0 only supports 1.8V IO.

  • Hello

    Thanks for the quick reply and details.

    BUT : this is not responding the original question which is : Does MMC1 support WIFI SDIO devices ?

    To be more clear : I have SD Cards working on MMC1. Fine. But I'm not able at all to use WIFI SDIO device on this interface. I wonder if something is blocking by construction on the SOC.

    Regards,

    Joel

  • I misunderstood your question. I thought you were asking about connecting an SDIO device to MMC0. There should not be any issue connecting an SDIO device to MMC1 from the hardware perspective as long as you do not violate the timing conditions and timing requirements defined in the datasheet for the respective mode of operation.

    The MMC1 - SD/SDIO section of the AM64x datasheet says "MMC1 interface is compliant with the SD Host Controller Standard Specification 4.10 and SD Physical Layer Specification v3.01 as well as SDIO Specification v3.00 and it supports the following SD Card applications:" then provides a list of supported data transfer modes.

    You mentioned that you have SD Cards on MMC1 and they are working. How are you connecting the SDIO device?  Are you connecting it via an SD Card connector?  Is it possible you have a signal integrity issue with the SDIO connection?

    What software are you using?  I may need to ask our software team if there is anything that needs to be done to enable the SDIO driver on MMC1.

    Regards,
    Paul

  • Hello

    Thanks. Yes please confirmation is highly appreciated.

    I'm using an SD card adapter. This is working on 2 other boards (not from TI) so I guess this is possible and the issue is not concerning signal integrity.

    Software: https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/08_01_00_39/exports/docs/linux/Overview_Building_the_SDK.html (building with am64xx-evm MACHINE). No modification of device tree.

    Regards,

    Joel

  • I suspect you are having an issue with software, so assigning this thread to someone on our Linux software team.

    Regards,
    Paul

  • Reassigning to the Wifi team to comment. Please ping the thread if you do not receive a response within a day or so.

    Regards,

    Nick

  • Hi Joel,

    Where in the AM64x datasheet does it state that SDIO is not supported on MMC0? I am looking at Table 6-55 and it shows otherwise. 

    Which WiFi SDIO device are you using? 

    BR,

    Seong

  • The table you reference is simply a generic signal name description. You should be looking at the MMC0 - eMMC Interface section in the Timing and Switching Characteristics section of the datasheet.  This is where the datasheet defines valid modes of operation.

    Regards,
    Paul

  • Hello

    This is mostly based on the thread I have indicated in my original post. But it's not really my concern.

    To recapitulate my question: I would like to have SDIO Wifi device working on SDcard slot (mmc1) of the TMDS64GPEVM or SK-AM64 evaluation board. The Wifi module is Laird ST-60. I'm using the DVK-ST60-SIPT evaluation board from Laird: https://www.lairdconnect.com/wireless-modules/wifi-modules-bluetooth/60-sipt-bluetooth-and-wifi-module.

    The Laird module works fine with 2 other evaluation boards (with SOC not from TI) but my customer would like to have TI board testing as well.

    I get the following error when the card is detected during the boot: "mmc1: error -84 whilst initialising SDIO card".

    I'm building with https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/08_01_00_39/exports/docs/linux/Overview_Building_the_SDK.html (with am64xx-evm MACHINE). No modification of device tree.

    Help is greatly appreciated because I have no idea where to start looking for the issue.

    Thanks and regards,

    Joel

  • Hello and

    I have not received feedbacks for the moment, I really need help from TI on this topic because no idea where to search now.

    Thanks for the support,

    Joel

  • Hello Guittet,

    Ahh, I did not realize you were not using a TI wifi device. Keep in mind that we can support TI parts and TI software on this forum, but we will not be able to support getting non-TI parts working with a generic Linux system.

    To confirm, have you tried this on both the AM64x EVM and the AM64x SK? Or just one of those boards? I have heard of the AM64x SK not working with some SD cards. The AM64x SK issue has not been fully debugged at this point, but it could be having an impact on what you are seeing.

    Have you checked the devicetree for the working EVMs to see if specific devicetree settings are used for the Wifi module?

    Regards,

    Nick

  • Hello

    This is not a TI Wifi device, but this is AM64 so it's TI SOC. To provide you more context my customer selected several SOCs (AM64, IMX8, STM32MP1...) and I'm doing a benchmark on several points. Wifi integration is a mandatory step.

    I have tried with both boards: AM64 EVM and AM64 SK. Both the same error is detected during the boot: "mmc1: error -84 whilst initialising SDIO card".

    SD Cards are working fine on the board, but not the Wifi device. The same Wifi device is used with no difficulties on other boards (iMX8, STM32MP1).

    Which kind of information to be checked in the device tree ? I have checked and also compared with iMX8 device tree but not found anything relevant.

    Thanks for the support,

    Joel

  • Hello Joel,

    We can support the AM64x itself, but we can't support literally every piece of software that someone tries to run on the AM64x. So if you can narrow the issue down to specifically the TI hardware, or TI code running on the TI hardware, then we can help.

    However, if your question is "how do I get this Laird part working with a Linux system?", then we cannot help because we didn't build the Laird part and we didn't write or test the Laird software. You first need to figure out that question on your own or by working with Laird. Once you can say "these are the specific steps needed to get the Laird part working with a Linux system. I am following those steps. The part is still not working, and here are my settings and terminal output", then we can start to help.

    It is possible that the EVMs that are working with the Laird part already have the settings required to get the Laird part working enabled by default. But again, TI does not know about NXP's default Linux settings for their NXP EVMs.

    Regards,

    Nick

  • The use of additional adapters between the EVM and the WiFi card could result in a signal integrity issue, which could be the reason you are getting an error -84. I suggest reducing the max. frequency used on the MMC I/F for testing purposes to see if this is the reason. You can change the max. frequency by adding a device tree property called max-frequency to the respective MMC DTS node. Something like this...

    &sdhci1 {
        max-frequency = <26000000>;
    };

    Regards, Andreas

  • Hello

    Test done with this addition in the device tree help a bit: module is detected and upload of the firmware begin but fails. Here is the log:

    dmesg | grep mmc1
    [ 2.956797] vdd_mmc1: supplied by vsys_3v3
    [ 2.971259] mmc1: CQHCI version 5.10
    [ 3.019641] mmc1: SDHCI controller on fa00000.mmc [fa00000.mmc] using ADMA 64-bit
    [ 3.082314] mmc1: new ultra high speed SDR104 SDIO card at address 0001
    [ 15.006388] lrdmwl_sdio mmc1:0001:1: <<Laird Connectivity 60 Series Wireless Network Driver version 9.32.0.6-P39-20190123>>
    [ 15.067272] lrdmwl_sdio mmc1:0001:1: PMU_EN GPIO not configured
    [ 21.241205] lrdmwl_sdio mmc1:0001:1: Direct firmware load for lrdmwl/regpwr.db failed with error -2
    [ 21.307362] btmrvl_sdio mmc1:0001:2: sdio device tree data not available

    I have verified the lock is correct:

    cat /sys/kernel/debug/mmc1/ios
    clock: 26000000 Hz
    actual clock: 25000000 Hz
    vdd: 21 (3.3 ~ 3.4 V)
    bus mode: 2 (push-pull)
    chip select: 0 (don't care)
    power mode: 2 (on)
    bus width: 2 (4 bits)
    timing spec: 6 (sd uhs SDR104)
    signal voltage: 1 (1.80 V)
    driver type: 0 (driver type B)

    I looks like the max-frequency has a good effect on the detection of the device.

    Can we conclude the mmc peripheral of the AM64 was unable to detect the module because of the poor wiring ?

    I will cross check this error with the manufacturer of the Wifi module, it seems the device tree need to be completed.

    Joel

  • Can we conclude the mmc peripheral of the AM64 was unable to detect the module because of the poor wiring ?

    Yes. I brought it up based on my own past experience (different boards/modules/processor vendor), and the error message pointed to some very low-level error so it all added up. This being said I'd not recommend this to be used as the "final solution", as it will likely affect throughput in a negative way. So once the module is properly connected/routed (w/ custom PCB for example), such workarounds should not be used/required.

    I will cross check this error with the manufacturer of the Wifi module, it seems the device tree need to be completed.

    Yes please. At this point there should be nothing "special" about getting this to work on AM64x vs. another processor. Similar device tree data, and driver files etc. should carry right over. If it works on another platform I'm confident we can get it to work on AM64x now.

    Regards, Andreas

  • Hello

    Just an update here, trying with 26MHz max frequency (+an other modification on the config specific to the wifi module) solved the issue, interface available and working.

    Something i don't understand is the following:

    cat /sys/kernel/debug/mmc1/ios
    clock: 26000000 Hz
    actual clock: 25000000 Hz

    There is a difference with clock/actual clock. Previously I have tried 25MHz max frequency in the device tree, and module was not detected. Computation of the clock looks strange !!! Do you know why ?

    Then I have increased to 104MHz, still working. At 208MHz the module is no more properly initialized.

    Joel

  • There is a difference with clock/actual clock

    Some amount of difference is generally not unusual due to the way the clock framework works in combination with the limitations of SoC clock trees and certain peripheral constraints. You can find a little more info here https://community.nxp.com/t5/i-MX-Processors/clock-vs-actual-clock-in-mmc-imx8qxp/m-p/1038886/highlight/true#M153073

    Previously I have tried 25MHz max frequency in the device tree, and module was not detected.

    That's a bit odd. Can you try that again? I'd expect the actual clock to be 25MHz here as well, matching the clock that was set.

    Then I have increased to 104MHz, still working. At 208MHz the module is no more properly initialized.

    Unless you need the speed during your evaluation I'd probably try to be as conservative as you can with the speed settings to prevent potential intermittent issues with your setup (what if 104MHz operation is marginal... it may break on another board, or if the device/board/room temperature changes, or ...).

    Regards, Andreas

  • Hello Andreas,

    Understood for the clock. Thanks.

    The goal number 1 for the project actually is to validate the bandwidth at 200MBits/s on the WifI interface. I need SDR104 with clock at 208MHz for that. Other configuration are not interesting for me unfortunately.

    Joel