调试 SPI 主设备读取任意值的原因

问题描述

我在 MAX V 设备和 AM335x 处理器之间有一个 SPI 总线。 MAX V 设备具有 SPI 设置以重复发送定义为“x0100”的 STD_LOGIC_VECTOR。 这似乎工作正常。作用域上的输出重复相同的值。

在 Linux 中,我似乎得到了移位数据或一些随机数据。从这里使用 spi-tools https://github.com/cpb-/spi-tools

使用这些工具时,我得到以下信息:

# spi-config -d /dev/spidev0.0 -m 1 -s 10000000
# spi-pipe -d /dev/spidev0.0 -b 2 -n 1 < /dev/urandom | hexdump
0000000 0202
0000002
# spi-pipe -d /dev/spidev0.0 -b 2 -n 1 < /dev/urandom | hexdump
0000000 0a0a
0000002
# spi-pipe -d /dev/spidev0.0 -b 2 -n 1 < /dev/urandom | hexdump
0000000 2a2a
0000002
# spi-pipe -d /dev/spidev0.0 -b 2 -n 1 < /dev/urandom | hexdump
0000000 aaaa
0000002
# spi-pipe -d /dev/spidev0.0 -b 2 -n 1 < /dev/urandom | hexdump
0000000 aaaa
0000002

您可以在那里看到设备的配置方式。在示波器上,MISO 引脚在 SCLK 上 16 个时钟周期清楚地输出“00000010 00000000”。这里发生了什么?如何从设备重复获取正确的值?

为了清楚起见,这里是设备树和内核配置的相关部分。

内核

CONFIG_SPI=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_GPIO=y
CONFIG_SPI_BITBANG=y
CONFIG_SPI_OMAP24XX=y
CONFIG_SPI_TI_QSPI=y
CONFIG_SPI_SPIDEV=y
CONFIG_REGMAP_SPI=y
CONFIG_MTD_SPI_NOR=y
CONFIG_SPI_CADENCE_QUADSPI=y

设备树

&spi1 {
    /* spi1 bus is connected to the CPLD only on CS0 */
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&spi1_pins>;
    ti,pindir-d0-out-d1-in;
    cpld_spidev: cpld_spidev@0 {
        status = "okay";
        compatible = "linux,spidev";
        spi-max-frequency = <1000000>;
        reg = <0>;
    };
};

这里也是生成的波形的屏幕截图。

enter image description here

实际上,最终目标是在 MAX V 设备上报告声明为 STD_LOGIC_VECTOR 的版本的应用。所以 0100 是 1.00 版本。

解决方法

使用 /boot/uEnv.txt 中名为 BB-SPIDEV0-00A0.dtbo 的 uboot_overlay。

如果您需要更多信息,请询问。哦!还有一个叫 Molloy 博士的人,他不久前出过一本书。

chp08/spi/ 是测试 SPI 设备所需的文件的位置。

命令就是spidev_test

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...