If BBB to be a master then th sclk dirction should be output 0x150 0x10 is 
right?

On Thursday, 7 November 2013 14:37:32 UTC+5:30, Jack Mitchell wrote:
>
> Hi Helen, 
>
> The SCLK pin should be an INPUT. 
>
> 0x150 0x10  /* spi0_sclk.spi0_sclk, OUTPUT_PULLUP */ 
>
> That line should be: 
>
> 0x150 0x30 /* spi0_sclk.spi0_sclk, INPUT_PULLUP */ 
>
> This is fixed on newer kernels, so I would also advise you to upgrade to 
> a later version. 
>
> On a side note, if you're struggling with SPI then I would recommend 
> trying out the libsoc[1] librarary. 
>
> Cheers, 
> Jack. 
>
> [1] https://github.com/jackmitch/libsoc 
>
> On 05/11/13 02:30, Helen Paiva wrote: 
> > 
> > Hi all, 
> > I am beginner with the BeagleBone Black board and I have a problem with 
> > the SPI communication. 
> > I am trying to communicate with the Redpine wifi board by SPI. The 
> > BeagleBone Black is the master and the wifi board is the slave. 
> > 
> > Part of the configuration of my BB-SPI0DEV-00A0.dts is the follow: 
> > 
> > /* state the resources this cape uses */ 
> >     exclusive-use = 
> >         /* the pin header uses */ 
> >         "P9.17",    /* spi0_cs0 */ 
> >         "P9.18",    /* spi0_d1 MOSI */ 
> >         "P9.21",    /* spi0_d0 MISO*/ 
> >         "P9.22",    /* spi0_sclk */ 
> >         /* the hardware ip uses */ 
> >         "spi0"; 
> > fragment@0 { 
> >         target = <&am33xx_pinmux>; 
> >         __overlay__ { 
> >             bb_spi0_pins: pinmux_bb_spi0_pins { 
> >                 pinctrl-single,pins = < 
> >                     0x150 0x10  /* spi0_sclk.spi0_sclk, OUTPUT_PULLUP | 
> > MODE0 */ 
> >                     0x154 0x30  /* spi0_d0.spi0_d0, INPUT_PULLUP | MODE0 
> */ 
> >                     0x158 0x10  /* spi0_d1.spi0_d1, OUTPUT_PULLUP | 
> MODE0 */ 
> >                     0x15c 0x10  /* spi0_cs0.spi0_cs0, OUTPUT_PULLUP | 
> > MODE0 */ 
> >                 >; 
> >             }; 
> >         }; 
> >     }; 
> > 
> > 
> > I made all the configuration for the SPI and I am trying to execute the 
> > spidev_test exemple. 
> > I am using the osciloscophe, so I can see that the message sent and 
> > received are corrects! 
> > I am sendding 0x15 0x00 and receiving 0x00 0x58, but in the program, the 
> > receive rx only shows me 0x00 0x00. 
> > Somebody can help me to find what I am doing wrong? If the osciloscope 
> > shows me the correct signal for the send, receive, clock and CS. What 
> > could be wrong in my SPI configuration? I tried so many configurations, 
> > I dont know if I am setting wrong the ioctl. 
> > 
> > Spidev_test exemplo: 
> > 
> > #include <stdint.h> 
> > #include <unistd.h> 
> > #include <stdio.h> 
> > #include <stdlib.h> 
> > #include <getopt.h> 
> > #include <fcntl.h> 
> > #include <sys/ioctl.h> 
> > #include <linux/types.h> 
> > #include <linux/spi/spidev.h> 
> > 
> > #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 
> > 
> > static void pabort(const char *s) 
> > { 
> > perror(s); 
> > abort(); 
> > } 
> > 
> > static const char *device = "/dev/spidev1.0"; 
> > static uint8_t mode; 
> > static uint8_t bits = 8; 
> > static uint32_t speed = 500000; 
> > static uint16_t delay = 0; 
> > 
> > static void transfer(int fd) 
> > { 
> > int ret; 
> > uint8_t tx[] = { 
> > 0x15, 0x00, 
> > }; 
> > 
> > uint8_t rx[ARRAY_SIZE(tx)] = {0, }; 
> > 
> > struct spi_ioc_transfer tr = { 
> > .tx_buf = (unsigned long)tx, 
> > .rx_buf = (unsigned long)rx, 
> > .len = ARRAY_SIZE(tx), 
> > .delay_usecs = delay, 
> > .speed_hz = speed, 
> > .bits_per_word = bits, 
> > }; 
> > 
> > ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr); 
> > if (ret < 1) 
> > pabort("can't send spi message"); 
> > 
> > for (ret = 0; ret < ARRAY_SIZE(tx); ret++) { 
> > if (!(ret % 6)) 
> > puts(""); 
> > printf("%.2X ", rx[ret]); 
> > } 
> > puts(""); 
> > } 
> > 
> > 
> > int main(int argc, char *argv[]) 
> > { 
> > int ret = 0; 
> > int fd; 
> > 
> > fd = open(device, O_RDWR); 
> > if (fd < 0) 
> > pabort("can't open device"); 
> > 
> > /* 
> > * spi mode 
> > */ 
> > ret = ioctl(fd, SPI_IOC_WR_MODE, &mode); 
> > if (ret == -1) 
> > pabort("can't set spi mode"); 
> > 
> > ret = ioctl(fd, SPI_IOC_RD_MODE, &mode); 
> > if (ret == -1) 
> > pabort("can't get spi mode"); 
> > 
> > /* 
> > * bits per word 
> > */ 
> > ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits); 
> > if (ret == -1) 
> > pabort("can't set bits per word"); 
> > 
> > ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits); 
> > if (ret == -1) 
> > pabort("can't get bits per word"); 
> > 
> > /* 
> > * max speed hz 
> > */ 
> > ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed); 
> > if (ret == -1) 
> > pabort("can't set max speed hz"); 
> > 
> > ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed); 
> > if (ret == -1) 
> > pabort("can't get max speed hz"); 
> > 
> > printf("spi mode: %d\n", mode); 
> > printf("bits per word: %d\n", bits); 
> > printf("max speed: %d Hz (%d KHz)\n", speed, speed/1000); 
> > 
> > transfer(fd); 
> > 
> > close(fd); 
> > 
> > return ret; 
> > } 
> > 
> > -- 
> > For more options, visit http://beagleboard.org/discuss 
> > --- 
> > You received this message because you are subscribed to the Google 
> > Groups "BeagleBoard" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> > an email to [email protected] <javascript:>. 
> > For more options, visit https://groups.google.com/groups/opt_out. 
>
>
> -- 
>   Jack Mitchell ([email protected] <javascript:>) 
>   Embedded Systems Engineer 
>   Cambridgeshire, UK 
>   http://www.embed.me.uk 
> -- 
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to