我正在尝试将华硕修补板 S 编程为 SPI 主机,并且从主机到从机微控制器的通信按预期工作,并且我能够将数据从华硕修补板 S SPI 主机发送到 STM32f140 SPI 从机. 我希望能够以两种方式读取数据,并且我尝试了一些方法,但它们似乎都不起作用。我正在使用 WiringPi 库(https://github.com/TinkerBoard/gpio_lib_c)
当我使用模拟发现来查看两个微控制器之间的连接时,双向数据都很好 - RX 和 TX 数据都是正确的,所以问题一定是在读取我的主控上的数据。我的 tinkerboard 上的代码如下所示:
#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 。
先感谢您