求助,用am3352芯片,内核使用3.2.0,使用内核自带的spidev驱动,还有应用程序spidev_test.c,实现spi通信,读取的芯片是陀螺仪芯片crm100,发送命令是6个字节:28 00 00 00 00 D7,但返回来的数据是不正常的。后来用示波器看了mosi引脚输出(也就是主CPU发送给从机芯片的信号),看到发送过去的波形,每隔一个字节(也就是8位),就会有一个间断拉高,不知道是不是每个字节发送会有间隔,使用ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);函数发送,现在数据返回不正常,不知道是不是因为发送的每个字节数据有间隔,造成从芯片识别数据错误,是spidev驱动有问题吗?还是硬件引起的毛刺? 请大神们帮帮忙啊 急啊!!
Jian Zhou:
SPI test这个应用程序只是一个最简单的测试程序,实际应用也要看你的SPI设备所要求的工作时序是什么,看看要不要对应修改SPI的驱动层。
liudong chen:
回复 Jian Zhou:
您好:
看到您是TI的员工,我满心喜悦,您一定有着大神的实力!!我这边现在有几个疑问?
1、335x配置里面的spi1_d0和spi1_d1哪一个是spi的输出和输入,为什么名称是d0和d1?两个都可以设置为输入输出吗?为什么默认的spi配置都将时钟spi1_sclk、spi输入输出、spi片选信号spi1_cs0都设置为输入AM33XX_INPUT_EN??不是应该输入就配置为输入,输出就配置为输出吗??
2、AM33XX_PULL_ENBL、AM33XX_PIN_OUTPUT、AM33XX_PULL_UP、AM33XX_PIN_INPUT_PULLDOWN、AM33XX_PIN_OUTPUT_PULLUP这些引脚的功能可以在哪里查看到他们的对应功能,都有些什么不同吗??
3、现在我的问题是选择用spi的片选引脚spi1_cs0功能,但是好像无法正常驱动芯片,而我把这个引脚配置成普通IO的方式,置高低电平去控制从机芯片就正常了,是spi的片选引脚spi1_cs0驱动电流不够?还是spi1_cs0的配置不对啊?我的配置是这样的:
static struct pinmux_config spi1_pin_mux[] = { {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, //spi's direction seems reverse from the reference. our test confirm that. {"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},};
spi1_cs0配置为AM33XX_INPUT_EN这样对吗?我试过配置为AM33XX_PIN_OUTPUT,但也是不行。到底怎么样的配置才正确啊??
难道335x的spi引脚有缺陷??
问题有点多,恳求细心查看,能够一一回复我,让我能从这片迷雾中释然清醒……小弟不胜感激啊!!
jianyu zhang1:
回复 Jian Zhou:
你好:
我现在正在使用am3352中spi通讯,主要是am3352和fpga通过spi进行通讯,am3352作为从设备,fpga作为主设备,
请问一下内核自带打驱动能不能实现这种通信方式? spi slave怎么配置?
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},};
以上是我配置的管教,需不需要做写其他设置?
恳求细心查看,回复我,…小弟不胜感激啊!!
jianyu zhang1:
回复 Jian Zhou:
你好:
我现在正在使用am3352中spi通讯,主要是am3352和fpga通过spi进行通讯,am3352作为从设备,fpga作为主设备,
请问一下内核自带打驱动能不能实现这种通信方式? spi slave怎么配置?
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},};
以上是我配置的管教,需不需要做写其他设置?
恳求细心查看,回复我,…小弟不胜感激啊!!
Lynn1:
回复 jianyu zhang1:
你的SPI slave 模式配置好了吗? TI都不带理会这个问题的