各位好!有问题需要请教一下!
我用AM3354 SDK里的linux驱动spidev.c生成驱动模块,然后用/Documentation/spi里的spidev_test.c生成应用程序,运行时,提示如下:
spidev spi2.0: setup: unsupported mode bits 10
can't set spi mode: Invalid argument
Aborted
PS:#define SPI_3WIRE 0x10 /* SI/SO signals shared */
Steven Liu1:
这个三线SPI的设备,需要在同一数据根线上能同时做MOSI和MISO。目前335上数据线可以配成MOSI,或者MISO,但是同时做,实现三线SPI,应该还不能支持。在TRM24.2.3中,对数据线的description描述中:Can be configured as either input or output (MOSI or MISO)
Jian Zhou:
回复 Steven Liu1:
请问您这个驱动是在哪个驱动文件里修改的?
我们的SPI总线配置是在spi-omap2-mcspi.c进行修改的,spidev.c只是某一个SPI设备的驱动。
Wayne.Woo:
回复 Jian Zhou:
(1)我只是想用spidev.c这个应用层程序去测试AM3354是否支持3-wire的SPI。
(2)我现在的开发需求如下:
a. 我有一个液晶屏,该LCD接口集成了3-wire的SPI,而该SPI接口是连接AM3354的,该SPI的作用是:在LCD显示之前需要对液晶屏上的驱动IC进行初始化;
b. 因此,我单独写一个初始化LCD驱动IC的SPI设备驱动,同时在board-am335xevm.c中添加如下代码:
static struct pinmux_config spi1_pin_mux[] = {{"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL| AM33XX_INPUT_EN},{"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL| AM33XX_PULL_UP | AM33XX_INPUT_EN},{"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL| AM33XX_INPUT_EN},{"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL| AM33XX_PULL_UP | AM33XX_INPUT_EN},{NULL, 0},};
static struct spi_board_info xxx_spi1_slave_info[] = { { .modalias = "xxx_spi_init", // .platform_data = &xxx_spi_info, .max_speed_hz = 24000000, .bus_num = 2, .chip_select = 0, .mode = SPI_3WIRE, },};
但是系统启动时打印信息:
spi spi2.0: setup: unsupported mode bits 10
(3)求指教,谢谢!
Jian Zhou:
回复 Wayne.Woo:
我看了下这部分的代码,首先drivers/spi/spidev.c这个是个通用的SPI设备的驱动程序哦,并不是应用程序。
另外.mode 这个参数应该设为:
#define SPI_MODE_0 (0|0)#define SPI_MODE_1 (0|SPI_CPHA)#define SPI_MODE_2 (SPI_CPOL|0)#define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)
当中的一个。
SPI_3WIRE应该通过应用层的IOCTL函数进行设置。
Jian Zhou:
回复 Jian Zhou:
另外多问一句,你指的SPI 3线是指不需要SPI_CS(SPIEN)这个信号线么,如果是这种模式,我们AM335x的SPI控制器是支持的,可以通过配置MCSPI_MODULCTRL寄存器的bit1来实现。
Wayne.Woo:
回复 Jian Zhou:
(1)我的3线SPI接口是:SCLK(时钟)、CS(片选)、DA(数据线,MISO和MOSI共用同一根数据线)。
Wayne.Woo:
回复 Jian Zhou:
Jian Zhou 于 2015-3-3 12:11 发表了以下帖子 :
我看了下这部分的代码,首先drivers/spi/spidev.c这个是个通用的SPI设备的驱动程序哦,并不是应用程序。
=====》【回复】 抱歉!笔误,我之前已经了解到drivers/spi/spidev.c是个通用的SPI设备的驱动程序,既然是通用驱动程序,那么也可以用在我的案例上。我是通过documentation/spi/spidev_test.c生成应用程序测试的。
运行命令如下:spidev_test -3 (注:3表示–3wire SI/SO signals shared)
打印信息:spidev spi2.0: setup: unsupported mode bits 10
PS:#define SPI_3WIRE 0x10 /* SI/SO signals shared */
【回复】
Jian Zhou:
回复 Wayne.Woo:
你可以看下我们TRM的table 24-17,我们的三线指的是SCLK和2个数据线。
数据线同时做输入输出目前没看到有支持,不过可以动态配置
Wayne.Woo:
回复 Jian Zhou:
如何动态配置?请指教
Jian Zhou:
回复 Wayne.Woo:
简单来讲,就是通过IOCTL来实现,读的时候将数据线设成receive,写的时候设置成transmit。
在应用层通过IOCTL控制这条数据线的收发。