Jump to content

    

SPI BeagleBoneBlack BBB

Angstrom Linux, BBB.

Потыкался, вроде бы включил SPI (прописал eEnv.txt: optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-SPI0-01,BB-SPI1-01 )

Но проблемы.

1. Иногда не появляется SPI2. А иногда появляется) Так и не понял от чего зависит, перезагружался, то есть, то нет. SPI1 вроде нормально.

2. После включения D1 работает на передачу. Т.е. получается, что D1 - MOSI. В описании вроде наоборот?

2. SPI2 включил, осцилом смотрю -- передает. Опрашиваю раз в секудну. По 4 байта. Сделал перемычку которую включаю в питание или в землю. По умолчанию в питании, читает все 4 байта 255, нормально, достаю, включаю в землю, приходят все байты одиноковые(второй столбик первые два байта выведено)

TransferOK <97> returned:<254 254>

TransferOK <97> returned:<252 252>

TransferOK <97> returned:<248 248>

TransferOK <97> returned:<240 240>

TransferOK <97> returned:<224 224>

TransferOK <97> returned:<192 192>

TransferOK <97> returned:<128 128>

TransferOK <97> returned:<0 0>

 

Узнаете? Каждое число отличается от соседнего сдвигом влево на 1. Что это за бред?)

Подаю ему MISO на MOSI читает 255.

 

SPI1 работает четко!

 

 

 

uint8_t BBSpiManager::readByte(){
     struct spi_ioc_transfer xfer[2];
      string inp, outp;
      outp = "abcd";
      inp = "0000";
      //inp.resize( outp.size() );

      int res=0;

      memset(xfer, 0, sizeof xfer);

      xfer[0].tx_buf = (unsigned long)outp.data();
      xfer[0].rx_buf = (unsigned long)inp.data();
      xfer[0].len = inp.size();
      xfer[0].speed_hz = 100000;
      xfer[0].cs_change = 1;
      xfer[0].bits_per_word = 8;
      xfer[0].delay_usecs= 10;

        res = ioctl(spiDev, SPI_IOC_MESSAGE(1), &xfer);
        usleep(10000);

    return 0;
    }

Share this post


Link to post
Share on other sites

Кажется, вопрос решился. Точно не уверен, тестирую.

По умолчанию, в папке /lib/firmware были файлы

BB-SPI0-01-00A0.dtbo

BB-SPI1-01-00A0.dtbo

Поэтому uEnv.txt я написал:

optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-SPI0-01,BB-SPI1-01

При старте либо создавалось 3 файла в папке /dev/

spidev1.0

spidev2.0

spidev2.1

И второй порт лагал, либо один файл

spidev1.0

 

Я, следуя инструкции по включению, сделал три новых файла

BB-SPIDEV0-00A0.dts

BB-SPIDEV1-00A0.dts

BB-SPIDEV1A1-00A0.dts, получил из них *.dtbo

и переписал строку uEnv

optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-SPIDEV0,BB-SPIDEV1

 

При первом включении создалось

root@beaglebone:~# ls /dev/sp*

/dev/spidev1.0 /dev/spidev1.1 /dev/spidev2.0 /dev/spidev2.1

И второй порт заработал нормально. В чем причина такого поведения, не знаю. Стабильность появления второго порта после перезагрузки буду проверять

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this