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:TMDS64EVM 电路板中 EEPROM (93lc4b) 的 SPI 外设通信

Guru**** 2587345 points
Other Parts Discussed in Thread: AM6442, TMDS64EVM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1574919/am6442-spi-peripheral-communication-for-eeprom-93lc4b-in-tmds64evm-board

器件型号:AM6442
Thread 中讨论的其他器件: TMDS64EVM

工具/软件:

尊敬的团队:

我正在使用运行 Linux 的 TI 平台上的 SPI 外设连接 93LC4B EEPROM。 我有几个问题:

  1. 需要在内核中启用哪些驱动程序? 具体来说、我应该在defconfig文件中修改哪些选项来支持 SPI 通信和 EEPROM 访问?

  2. 我应该在哪里进行更改以访问 EEPROM? 我应该修改 SPI 驱动程序、nvmem 子系统还是 MISC 驱动程序路径、以便正确注册和访问 93LC4B EEPROM 吗?

附加一些日志以供参考:

root@am64xx-EVM:~# dmesg | grep SPI (OSPI 分区即将推出)
[  0.000000]内核命令行:console=ttyS2115200n8 ubi.MTD=ospi.rootfs root=ubi0:rootfs rootfstype=ubifs rw rootwait=1
[  0.394061] spi-NOR spi0.0:s28hs512t (65536 KB)
[0.394193]  MTD 设备 fc40000.SPI.0 上有 9 个固定分区
[0.394206]  在“fc40000.SPI.0"上“上创建 9 个 MTD 分区:
[0.394213]  0x000000000000-0x000000100000:“ospi.tiboot3"</s>“
[0.395903]  0x00000010000-0x000000300000:“ospi.tispl"</s>“
[0.397319]  0x000000300000-0x000000700000:“ospi.u-boot"</s>“
[0.398746]  0x000000700000-0x000000740000:“ospi.env"</s>“
[  0.400221] 0x000000740000-0x000000780000:“ospi.env.backup"</s>“
[0.401651]  0x000000780000-0x000000800000:“ospi.dtb"</s>“
[  0.403077] 0x000000800000-0x000001c00000:“ospi.kernel"</s>“
[  0.404545] 0x000001c00000-0x000003fc0000:“ospi.rootfs"</s>“
[  0.406002] 0x000003fc0000-0x000004000000:“ospi.phypatern"</s>“
[0.517785]  ubi0:附加 mtd7(名称“ospi.rootfs",“,大小、大小 35 MIB)

Root@am64xx-EVM:~# dmesg | grep EEPROM(无日志)

root@am64xx-EVM:~# ls /sys/bus/spi (SPI 驱动程序检查日志)
器件       功能       drivers_autoprobe drivers_probe   uevent
root@am64xx-EVM:~# ls /sys/bus/spi/devices
spi0.0
root@am64xx-EVM:~# ls /sys/bus/spi/drivers
ds3234      MMC_SPI     MTD_DataFlash SPI-n 和    SPI-NOR     sst25l

root@am64xx-EVM:~# ls /sys/bus/nvmem(NVMEM 驱动程序检查日志)
器件       功能       drivers_autoprobe drivers_probe   uevent
root@am64xx-EVM:~# ls /sys/bus/nvmem/devices
mtd0 mtd1 mtd2 mtd3 mtd4 mtd5 mtd6 mtd7 mtd8         

此致、

Ravilla Dinesh。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ravilla:

    [引述 userid=“649949" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1574919/am6442-spi-peripheral-communication-for-eeprom-93lc4b-in-tmds64evm-board 需要在内核中启用哪些驱动程序? 具体来说、我应该在defconfig文件中修改哪些选项以支持 SPI 通信和 EEPROM 访问?

    以下配置应适用于 使用 SPI 接口启用 93LC4B EEPROM:

    • 内核 SPI 支持:
      CONFIG_SPI=y(启用核心 Linux SPI 子系统)
      CONFIG_SPI_MASTER=y(启用主端 SPI 基础架构。)
    • SPI 控制器驱动程序(适用于 AM64x/AM243x 平台):
      CONFIG_SPI_OMAP24xx=y(AM6442 上的 McSPI 外设的特定驱动程序)
    • 93LC4B 的 EEPROM 驱动程序:
      CONFIG_EEPROM_93XX46=y(SPI EEPROM 驱动器)
      CONFIG_NVMEM=y ->(支持非易失性存储器 (NVMEM) 所需)
      CONFIG_NVMEM_SYSFS=y(驱动程序通过/sys/中的文件公开 EEPROM 内容需要)
    • CONFIG_SYSFS=y(擦除属性需要)
    • 可选:
      CONFIG_SPIDEV=y ->(如果需要,用于用户空间访问)
      CONFIG_SPI_DEBUG=y ->(用于调试(可选))
    [引述 userid=“649949" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1574919/am6442-spi-peripheral-communication-for-eeprom-93lc4b-in-tmds64evm-board 我应该在哪里进行更改以访问 EEPROM? 我应该修改 SPI 驱动程序、nvmem 子系统还是 MISC 驱动程序路径、以便正确注册和访问 93LC4B EEPROM 吗?

    您不需要修改任何现有驱动程序。 您需要注意的是器件树和正确的 pinmux 配置。  

    从日志中、我们有“spi-NOR spi0.0:s28hs512t“、因此、为了避免冲突 I 与 SPI0 发生冲突、我建议在 DT 配置中使用 SPI1

    &MAIN_SPI1{
    状态=“正常“;
    pinctrl-names =“default";“;
    pinctrl-0 =<&MAIN_SPI1_pins_default>;
    #address-cells =<1>;
    #size-cells =<0>;

    EEPROM@0{
    Compatible =“microchip、93lc46b“;
    reg =<0>;/*芯片选择 0 */
    SPI-max-frequency =<1000000>;/* 1MHz */
    SPI-cs-high;/* 93LC4B 需要高电平有效 CS */
    DATA-SIZE =<16>;/* 93LC4B 的 16 位寻址*/
    };
    };

    此外、还要检查 pinxmux 配置的正确性:

    &main_pmx0{
    MAIN_SPI1_PINS_DEFAULT:main-SPI1-default-pins{
    pinctrl-single、pins =<
    AM64X_IOPAD (0x0224、PIN_OUTPUT、0)/*(C14) SPI1_CLK */
    AM64X_IOPAD (0x0228、PIN_OUTPUT、0)/*(B15) SPI1_D0 */
    AM64X_IOPAD (0x022c、PIN_INPUT、0)/*(A15) SPI1_D1 */
    AM64X_IOPAD (0x021c、PIN_OUTPUT、0)/*(B14) SPI1_CS0 */
    >;
    };
    };

    谢谢您、

    Paula

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Paula、

    EVM 板 — TMDS64EVM 板

    SDK 版本 — RT-Linux(版本 — 11.01.05.03 和 09.02.01.10 两个 SDK)、并参考此 SDK 中的 DTS 文件。

    如前所述、我想将 SPI1 引脚用于外部 EEPROM。

    但 EEPROM 连接到 SPI0 引脚内部 EEPROM 93LC46B.

    &main_pmx0{
    MAIN_SPI1_PINS_DEFAULT:main-SPI1-default-pins{
    pinctrl-single、pins =<
    AM64X_IOPAD (0x0224、PIN_OUTPUT、0)/*(C14) SPI1_CLK */
    AM64X_IOPAD (0x0228、PIN_OUTPUT、0)/*(B15) SPI1_D0 */
    AM64X_IOPAD (0x022c、PIN_INPUT、0)/*(A15) SPI1_D1 */
    AM64X_IOPAD (0x021c、PIN_OUTPUT、0)/*(B14) SPI1_CS0 */
    >;
    };
    };

    ----------------------------------------------------------------------------------------------------------------------------------

    从日志中、我们有“spi-NOR spi0.0:s28hs512t“、因此、为了避免冲突 I 与 SPI0 发生冲突、我建议在 DT 配置中使用 SPI1。

    OSPI 引脚配置不同。

    ospi0_pins_default:ospi0-default-pins{
    pinctrl-single、pins =<
    AM64X_IOPAD (0x0000、PIN_OUTPUT、0)/*(N20) OSPI0_CLK */
    AM64X_IOPAD (0x002c、PIN_OUTPUT、0)/*(L19) OSPI0_CSn0 */
    AM64X_IOPAD (0x000c、PIN_INPUT、0)/*(M19) OSPI0_D0 */
    AM64X_IOPAD (0x0010、PIN_INPUT、0)/*(M18) OSPI0_D1 */
    AM64X_IOPAD (0x0014、PIN_INPUT、0)/*(M20) OSPI0_D2 */
    AM64X_IOPAD (0x0018、PIN_INPUT、0)/*(M21) OSPI0_D3 */
    AM64X_IOPAD (0x001c、PIN_INPUT、0)/*(P21) OSPI0_D4 */
    AM64X_IOPAD (0x0020、PIN_INPUT、0)/*(P20) OSPI0_D5 */
    AM64X_IOPAD (0x0024、PIN_INPUT、0)/*(N18) OSPI0_D6 */
    AM64X_IOPAD (0x0028、PIN_INPUT、0)/*(M17) OSPI0_D7 */
    AM64X_IOPAD (0x0008、PIN_INPUT、0)/*(N19) OSPI0_DQS */
    >;
    全部引导;
    };

    &ospi0{
    状态=“正常“;
    pinctrl-names =“default";“;
    pinctrl-0 =<&ospi0_pins_default>;
    全部引导;

    };

    ---------------------------------------------------------------------------------------------------------------------------------------

    SPI0 引脚配置:-

    main_spi0_pins_default:main-spi0-default-pins{
    pinctrl-single、pins =<
    AM64X_IOPAD (0x0210、PIN_INPUT、0)/*(D13) SPI0_CLK */
    AM64X_IOPAD (0x0208、PIN_OUTPUT、0)/*(D12) SPI0_CS0 */
    AM64X_IOPAD (0x0214、PIN_OUTPUT、0)/*(A13) SPI0_D0 */
    AM64X_IOPAD (0x0218、PIN_INPUT、0)/*(A14) SPI0_D1 */
    >;
    };

    &main_spi0{
    全部引导;
    状态=“正常“;
    pinctrl-names =“default";“;
    pinctrl-0 =<&MAIN_spi0_pins_default>;
    TI、pindir-d0-out-D1-in;

    EEPROM@0{
    ///compatible =“微芯片,93lc46b“;
    Compatible =“microchip、93lc46“;//更改了 93lc46
    reg =<0>;
    SPI-max-frequency =<1000000>;
    SPI-cs 高电平;
    数据大小=<16>;
    };
    };

    我认为、不同引脚配置下、这两种配置之间没有冲突。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ravilla:

    抱歉、您是正确的 OSPI0 和 SPI0 是独立的控制器、不知何故、我被日志“spi-nor spi0.0:s28hs512t“所混淆

    谢谢您、

    Paula

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Paula、

    以下配置应适用于 使用 SPI 接口启用 93LC4B EEPROM:

    • 内核 SPI 支持:
      CONFIG_SPI=y(启用核心 Linux SPI 子系统)
      CONFIG_SPI_MASTER=y(启用主端 SPI 基础架构。)
    • SPI 控制器驱动程序(适用于 AM64x/AM243x 平台):
      CONFIG_SPI_OMAP24xx=y(AM6442 上的 McSPI 外设的特定驱动程序)
    • 93LC4B 的 EEPROM 驱动程序:
      CONFIG_EEPROM_93XX46=y(SPI EEPROM 驱动器)
      CONFIG_NVMEM=y ->(支持非易失性存储器 (NVMEM) 所需)
      CONFIG_NVMEM_SYSFS=y(驱动程序通过/sys/中的文件公开 EEPROM 内容需要)
    • CONFIG_SYSFS=y(擦除属性需要)
    • 可选:
      CONFIG_SPIDEV=y ->(如果需要,用于用户空间访问)
      CONFIG_SPI_DEBUG=y ->(用于调试(可选))

    我们在/ti-linux-kernel/arch/arm64/config/defconfig.中已启用所有这些配置 然后使用 make Linux 命令构建空洞。 获取该映像 k3-am642-evm.dtb 文件并放置在 SD 卡根文件系统(内核侧)中。

    但/sys/bus/spi/drivers.中没有提供驱动程序

    root@am64xx-EVM:~# cd /dev/ (/dev 中没有驱动程序)
    root@am64xx-EVM:/dev# ls
    autofs    mtd0 ptyp6 tty23 tty55 ttypa.     
    块    mtd0ro ptyt7 tty24 tty56 ttymb     
    char    mtd1 ptyp8 tty25 tty57 ttypc     
    console      mtd1ro ptyp9 tty26 tty58 ttyd.     
    磁盘    mtd2 ptypa tty27 tty59 ttype     
    dma_heap     mtd2ro ptypb tty28 tty6 ttypf    
    fd    mtd3 ptypc tty29 tty60    ubi_ctrl
    完整的    mtd3ro ptyd tty3 tty61     udev_network_queue
    gpiochip0    mtd4 ptype tty30 tty62    urandom
    gpiochip1    mtd4ro ptypf tty31 tty63    vcs
    gpiochip2    mtd5 随机 tty32 tty7     vcs1
    hugepages    mtd5ro shm tty33 tty8   vcs2.
    I2C-0    mtd6 snd tty34 tty9   vcs3
    initctl      mtd6ro stderr tty35 ttyS0      vCS4
    kmsg    mtdblock0 stdin tty36 ttyS1    vcs5.
    记录    mtdblock1 stdout tty37 ttyS10     vCS6.
    loop-control mtdblock2 tee0 tty38 ttyS11   vcsa
    loop0    mtdblock3 teepriv0 tty39 ttyS2    vcsa1
    loop1    mtdblock4 tty tty4 ttyS3      vcsa2
    loop2    mtdblock5 tty0 tty40 ttyS4     vcsa3
    loop3    mtdblock6 tty1 tty41 ttyS5     vcsa4
    loop4    net tty10 tty42 ttyS6    vcsa5
    loop5    null tty11 tty43 ttyS7   vcsa6
    loop6    端口 tty12 tty44 ttyS8   VCSU
    loop7    pps0 tty13 tty45 ttyS9    vcsu1.
    mem ptmx    tty14 tty46 ttyp0   vcsu2
    mmcblk0      ptp0 tty15 tty47 ttyp1   vcsu3
    mmcblk0boot0 ptp1 tty16 tty48 ttyp2   vcsu4
    mmcblk0boot1 pts tty17 tty49 ttyp3   vcsu5.
    mmcblk0p1 pty0 tty18    tty5 ttyp4     vcsu6.
    mmcblk0rpmb pty1 tty19  tty50 ttyp5    vfio
    mmcblk1      ptyp2 tty2 tty51 ttyp6    零
    mmcblk1p1    pty3 tty20 tty52 ttyp7.   
    mmcblk1p2    ptyp4 tty21 tty53 ttyp8.   
    mqueue    ptyp5 tty22 tty54 ttyp9.  

    发出 dd 命令后、驱动程序可用。

    root@am64xx-EVM:/dev# echo -n “hello"|“| dd of=/dev/at93c46 BS=1 seek=0
    中有 5+0 条记录
    5+0 记录输出
    复制 5 字节、0.000392455s、12.7kB/s
    root@am64xx-EVM:/dev# ls
    at93c46      mqueue ptyp5 tty21   tty53 ttyp8.   
    autofs    mtd0 ptyp6 tty22 tty54 ttyp9.      
    块    mtd0ro ptyt7 tty23 tty55 ttypa.      
    char    mtd1 ptyp8 tty24 tty56 ttypb      
    console      mtd1ro ptyp9 tty25 tty57 ttypc.      
    磁盘    mtd2 ptypa tty26 tty58 ttyd.      
    dma_heap     mtd2ro ptyb tty27 tty59 ttype      
    fd    mtd3 ptypc tty28 tty6 ttypf       
    完整    mtd3ro ptyd tty29 tty60     ubi_ctrl

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Ravilla、我相信这已经开始工作了、对吧? 您可以使用“dd"命令“命令吗?

    一个问题是、您先在 EEPROM 配置下方分享、然后(上面)这是您使用的配置吗?

    EEPROM@0{
    ///compatible =“微芯片,93lc46b“;
    Compatible =“microchip、93lc46“;//更改了 93lc46
    reg =<0>;
    SPI-max-frequency =<1000000>;
    SPI-cs 高电平;
    数据大小=<16>;
    };
    };

    如果是、您在哪种 DTS 中使用? (u-boot /内核)。 还有,为什么没有“b"?“?  

    谢谢您、

    Paula

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Paula、

    请检查并更新其太紧急。 我们已经没有时间了。

    SPI0 引脚配置:-

    RT-Linux SDK: —  09.02.01.10

    main_spi0_pins_default:main-spi0-default-pins{
    pinctrl-single、pins =<
    AM64X_IOPAD (0x0210、PIN_INPUT、0)/*(D13) SPI0_CLK */
    AM64X_IOPAD (0x0208、PIN_OUTPUT、0)/*(D12) SPI0_CS0 */
    AM64X_IOPAD (0x0214、PIN_OUTPUT、0)/*(A13) SPI0_D0 */
    AM64X_IOPAD (0x0218、PIN_INPUT、0)/*(A14) SPI0_D1 */
    >;
    };

    &main_spi0{
    全部引导;
    状态=“正常“;
    pinctrl-names =“default";“;
    pinctrl-0 =<&MAIN_spi0_pins_default>;
    TI、pindir-d0-out-D1-in;

    EEPROM@0{
    ///compatible =“微芯片,93lc46b“;
    Compatible =“microchip、93lc46“;//更改了 93lc46
    reg =<0>;
    SPI-max-frequency =<1000000>;
    SPI-cs 高电平;
    数据大小=<16>;
    };
    }

    我们以前只做过。 请查看我们之前提到的日志。 但未启用驱动器。 可以、请检查并更新我。

    请为我们提供分步流程。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨 Ravilla,也许我错过了一些东西,但为什么你使用“microchip,93lc46"而“而不是“microchip,93lc46b" ?“? 我相信正确的司机的名字是“93lc46b"。“。 请您试一下吗? 您使用的是 TI 的 EVM 还是定制电路板? 如果是定制器件、SPI EEPROM 会发生哪些变化?

    您是否可以共享您已完成的 DTS(U-boot 或内核)更改 (diff)?

    谢谢您、

    Paula

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Paula、

    我使用的是 TI EVM 板。 在底部附加了一个文本文件。 请检查它。

    bin file: —  ti-processor-sdk-linux-rt-am64xx-evm-09.02.01.10-Linux-x86-Install.bin

    e2e.ti.com/.../1157.k3_2D00_am642_2D00_evm.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的 Ravilla、我会检查一下。 同时还有几个简短的问题

    -我现在看到“compatible =“microchip,93lc46b";“;“结果是一样的吗? 或者、您可以共享新日志吗?

    - 在 defconfig 中进行的任何更改超过建议的更改? 您能否分享所做更改的差异?

    谢谢您、

    Paula