问题描述
我在 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>;
};
};
实际上,最终目标是在 MAX V 设备上报告声明为 STD_LOGIC_VECTOR 的版本的应用。所以 0100 是 1.00 版本。
解决方法
使用 /boot/uEnv.txt 中名为 BB-SPIDEV0-00A0.dtbo 的 uboot_overlay。
如果您需要更多信息,请询问。哦!还有一个叫 Molloy 博士的人,他不久前出过一本书。
chp08/spi/ 是测试 SPI 设备所需的文件的位置。
命令就是spidev_test