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 を受信しました。
前もって感謝します