Re: AM335x BeagleBone SPI Issues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Tue, Dec 11, 2012 at 03:23:48PM +0000, Jack Mitchell wrote:
> On 11/12/12 14:27, Felipe Balbi wrote:
> >Hi again,
> >
> >On Tue, Dec 11, 2012 at 01:48:10PM +0200, Felipe Balbi wrote:
> >>On Tue, Dec 11, 2012 at 10:38:58AM +0000, Jack Mitchell wrote:
> >>>On 11/12/12 10:20, Felipe Balbi wrote:
> >>>>Hi,
> >>>>
> >>>>On Tue, Dec 11, 2012 at 10:17:42AM +0000, Jack Mitchell wrote:
> >>>>
> >>>><big snip>
> >>>>
> >>>>>Shubhro, Felipe,
> >>>>>
> >>>>>Thank you, the reordering dma patch fixed the dma issue I was having!
> >>>>>However, the bad news, I now get the same results for the dma and
> >>>>>non-dma spidev test. While the scope shows the SPI clk and data is
> >>>>>fine, the reading from the program still shows 0x00 for all words.
> >>>><removed spidev_test output>
> >>>>
> >>>>>dmesg shows nothing of interest apart from the spi bus setting up.
> >>>>>Any ideas?
> >>>>>
> >>>>>To iterate for my own sanity; I have bridged pins 18 and 21 on the P9
> >>>>>header which should be the d0 and d1 spi data pins for spi0. This
> >>>>>result of 0x00 usually comes from a result of not joining the pins,
> >>>>>but I can assure you they are joined!
> >>>>>
> >>>>>Thank you for the help so far.
> >>>>according to the schematics [1], those pins are muxed as UART2_TXD and
> >>>>I2C1_SDA, have you remuxed them properly ? Can you try with pins 29 and
> >>>>30 on the same header ? That's SPI1, so you will have to add DT data for
> >>>>spidev on that bus too.
> >>>>
> >>>>[1] http://beagleboard.org/static/beaglebone/latest/Docs/Hardware/BONE_SCH.pdf
> >>>>
> >>>No change unfortunately:
> >>>
> >>>root@beaglebone:~# ./spidev
> >>>spi mode: 0
> >>>bits per word: 16
> >>>max speed: 24000000 Hz (24000 KHz)
> >>>
> >>>00 00 00 00 00 00
> >>>00 00 00 00 00 00
> >>>00 00 00 00 00 00
> >>>00 00 00 00 00 00
> >>>00 00 00 00 00 00
> >>>00 00 00 00 00 00
> >>>00 00
> >>>
> >>>root@beaglebone:~# ./spidev -D /dev/s
> >>>shm/       spidev1.0  spidev2.0  stderr     stdin      stdout
> >>>root@beaglebone:~# ./spidev -D /dev/spidev2.0
> >one thing caught my attention, shouldn't you be passing '-l' argument
> >here for loopback testing ? That would mean you need to make sure your
> >"spi->mode" has SPI_LOOP flag set. Currently there is no way to do that
> >via DeviceTree (AFAICT), so please apply ths patch to your tree and set
> >spi-loopback; property for your spidev entry:
> >
> >diff --git a/Documentation/devicetree/bindings/spi/spi-bus.txt b/Documentation/devicetree/bindings/spi/spi-bus.txt
> >index 296015e..1949586 100644
> >--- a/Documentation/devicetree/bindings/spi/spi-bus.txt
> >+++ b/Documentation/devicetree/bindings/spi/spi-bus.txt
> >@@ -55,6 +55,8 @@ contain the following properties.
> >      		chip select active high
> >  - spi-3wire       - (optional) Empty property indicating device requires
> >      		    3-wire mode.
> >+- spi-loopback    - (optional) Empty property indicating device requires
> >+    		    loopback mode.
> >  If a gpio chipselect is used for the SPI slave the gpio number will be passed
> >  via the cs_gpio
> >diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> >index 3f1b9ee..6bcdc03 100644
> >--- a/drivers/spi/spi.c
> >+++ b/drivers/spi/spi.c
> >@@ -868,6 +868,8 @@ static void of_register_spi_devices(struct spi_master *master)
> >  			spi->mode |= SPI_CS_HIGH;
> >  		if (of_find_property(nc, "spi-3wire", NULL))
> >  			spi->mode |= SPI_3WIRE;
> >+		if (of_find_property(nc, "spi-loopback", NULL))
> >+			spi->mode |= SPI_LOOP;
> >  		/* Device speed */
> >  		prop = of_get_property(nc, "spi-max-frequency", &len);
> >
> 
> I get the following error when I apply this patch and add spi-loopback.
> 
> &spi0 {
>   status = "okay";
>   pinctrl-names = "default";
>   pinctrl-0 = <&spi0_pins>;
> 
>   spidev0: spidev@0 {
>   compatible = "linux,spidev";
>   reg = <0>;
>   spi-max-frequency = <24000000>;
>   spi-loopback;
>   };
> 
> };
> 
> [    1.093565] omap2_mcspi 48030000.spi: registered master spi1
> [    1.094491] spi spi1.0: setup: unsupported mode bits 20
> [    1.100035] omap2_mcspi 48030000.spi: can't setup spi1.0, status -22
> [    1.106715] spi_master spi1: spi_device register error
> /ocp/spi@48030000/spidev@0
> [    1.115030] omap2_mcspi 481a0000.spi: registered master spi2
> [    1.115710] spi spi2.0: setup: unsupported mode bits 20
> [    1.121225] omap2_mcspi 481a0000.spi: can't setup spi2.0, status -22
> [    1.127903] spi_master spi2: spi_device register error
> /ocp/spi@481a0000/spidev@0
> 
> I have run this test many times before and have never needed to use a
> loopback...

I finally managed to test with my pandaboard and I have same results as
yourself (btw you need to SPI_LOOP to mode_bits on
drivers/spi/spi-omap2-mcspi.c for this to probe fine, my bad).

I have looked at the pins over and over again and I'm sure I'm shorting
the correct pins... Oh well, time to debug :-p

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux