【发布时间】:2023-01-10 21:59:22
【问题描述】:
所以我正在使用 pi pico 的 c/c++ sdk 来尝试通过 spi 将数据发送到树莓派 4。在 Pi 4 上,我使用 wiringPi 库来实现 SPI 功能。但是,当我将我想在 SPI 上从我的 PICO 发送的值(在我检查范围时发送)发送到 Pi 4 时,pi 4 收到错误的信息,例如打印看似随机的字符而不是预期价值。
对此的任何帮助将不胜感激,请参阅下面我的 Pico 和我的 Pi 4 的代码,我希望收到 5 的值。我已将 pico 和 pi 4 中的 len 参数更改为 1、2、4 和 8,结果都相同。
#include <iostream>
#include <stdio.h>
#include "hardware/uart.h"
#include "pico/stdlib.h"
#include "hardware/spi.h"
using namespace std;
//-------SPI Ports-------
#define SPI_PORT spi0
#define SPI_PORT_1 spi1
//-----------------------
//-------Port 0 SPI pins--------
#define MOSI 3
#define MISO 4
#define SCK 2
#define CS 5
//------------------------------
//-------UART Setup-------
#define UART_ID uart0
#define BAUD_RATE_UART 115200
#define UART_TX_PIN 0
#define UART_RX_PIN 1
//------------------------
uint8_t test_send;
uint8_t test_read[3];
int main() {
stdio_init_all();
//-------------------UART init------------------
uart_init(UART_ID, BAUD_RATE_UART);
gpio_set_function(UART_TX_PIN, GPIO_FUNC_UART);
gpio_set_function(UART_RX_PIN, GPIO_FUNC_UART);
//----------------------------------------------
spi_init(SPI_PORT, 500000);
gpio_init(CS);
gpio_set_dir(CS, GPIO_OUT);
gpio_put(CS, 1);
spi_set_format(SPI_PORT, 12, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST);
gpio_set_function(SCK, GPIO_FUNC_SPI);
gpio_set_function(MOSI, GPIO_FUNC_SPI);
gpio_set_function(MISO, GPIO_FUNC_SPI);
test_send = 5;
while(1){
//printf("here top");
gpio_put(CS, 0);
spi_write_blocking(SPI_PORT, &test_send, 1);
//spi_read_blocking(SPI_PORT, 0, test_read, 1);
gpio_put(CS, 1);
//printf("here\n");
}
}
这是我用于 Pi 4 的代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
//#include </home/dean21/Documents/mosquitto-master/include/mosquitto.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <errno.h>
#include <string.h>
using namespace std;
static const int CHANNEL = 0;
unsigned char holder[100];
unsigned char test;
static int myFd;
int main(){
wiringPiSetupGpio();
//holder[0] = 0x5;
unsigned char result;
wiringPiSPISetup (CHANNEL, 500000);
// even though this function is for read and write im only using it as a read
while(1){
wiringPiSPIDataRW(CHANNEL, //Enable / CS pin
holder, //Data
1); //Lenth
cout << "holder value is: " << holder << endl;
//delay(1000);
}
}
输出示例如下所示,当它应该接收值 5 时
持有人的价值是:(
持有人的价值是:
持有人的价值是:@
持有人的价值是:P
持有人的价值是:
持有人的价值是:
持有人的价值是:
【问题讨论】:
-
test_send = 5;是一个字符。 0x05 是查询。对于数字 5,合适的数字是0x35或'5'。检查 ascii 表asciitable.com。始终初始化数组。
标签: c++ spi raspberry-pi4 raspberry-pi-pico