0

Asus ティンカー ボード S を SPI マスターとしてプログラムしようとしていますが、マスターからスレーブ マイクロコントローラーへの通信は期待どおりに機能し、Asus ティンカー ボード S SPI マスターから STM32f140 SPI スレーブにデータを送信できます。 . 両方の方法でデータを読み取れるようにしたいのですが、いくつか試してみましたが、どれもうまくいかないようです。WiringPi ライブラリ ( https://github.com/TinkerBoard/gpio_lib_c )を使用しています。

アナログ ディスカバリを使用して 2 つのマイクロコントローラー間の接続を確認すると、データはどちらの方法でも問題ありません。RX と TX の両方のデータが正しいため、問題はマスターのデータの読み取りにあるはずです。私のティンカーボードのコードは次のようになります。


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h>
#include <string.h>
#include <errno.h>

//#include <fcntl.h>
//#include <sys/ioctl.h>
//#include <linux/spi/spidev.h>

#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <wiringTB.h> 

int main()
  {
 
wiringPiSetupGpio();

//asus_set_pin_mode(257,OUTPUT); //MOSI OUT
//asus_set_pin_mode(254,OUTPUT); //CLK OUT
asus_set_pin_mode(255, OUTPUT); //CS OUT
//asus_digitalWrite(257, LOW);
//asus_digitalWrite(254, LOW);
asus_digitalWrite(255,HIGH);
asus_set_pin_mode(256,INPUT);  
 
         uint8_t b=0;
        int spimode = 3;
        int spichannel = 1;
        int spispeed = 8000000;
uint8_t i=0;
int x;


 
        int fd = wiringPiSPISetupMode(spichannel,spispeed,spimode);
 

        if(fd==-1) {
            printf("Spi fail \n");
            return -1;
        }
 
        printf("\n SPI success \n");
 

        delayMicroseconds(1000);

while(1){

        unsigned char buf[4] = {1, 9, 0, 0};
        int8_t Req_header_MOSI[4] = {1, 9, 0, 0};
        unsigned char inbuf[4];


asus_digitalWrite(255,LOW);

for(i=0;i<4;i++){
     inbuf[i] = wiringPiSPIDataRW(spichannel, &buf[i], 1);

printf("%d",inbuf[i]);

}
delayMicroseconds(100);



 delayMicroseconds(1000);

asus_digitalWrite(255,HIGH);



printf("\n");
        delayMicroseconds(1000);

 
      }
}
 




私のスレーブでは、予想どおり 1 9 0 0 を読み取り、代わりに 5 6 7 8 を送信しようとしましたが、マスターで 1 1 1 1 を受信しました。

前もって感謝します

4

0 に答える 0