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.
