【问题标题】:Communication with ADXL355 using SPI使用 SPI 与 ADXL355 通信
【发布时间】:2018-03-22 16:10:27
【问题描述】:

当通过 Raspberry Pi 与 ADXL355 加速度计通信时,i2c 可以完美运行。但是,当我尝试使用 SPI 时,寄存器地址与手册中的地址不匹配,我需要了解原因。

例如,下面的代码打印出发送 0x00、0x01、0x02 和 0x03 的结果,根据手册(以及我使用 i2c 时的经验)应该对应于 DEVID_AD、DEVID_MST、PARTID 和 REVID。

#include <bcm2835.h>
#include <stdio.h>

void transfer(char charToTransfer)
{
    char buffer[] = { charToTransfer, 0x00};
    bcm2835_spi_transfern(buffer, sizeof(buffer));
    printf("Rx:  %02X \n", buffer[1]);
}

int main(int argc, char **argv)
{
    if (!bcm2835_init())
        return 1;

    bcm2835_spi_begin();
    bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST);
    bcm2835_spi_setDataMode(BCM2835_SPI_MODE0);
    bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_256);
    bcm2835_spi_chipSelect(BCM2835_SPI_CS0); 
    bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS0, LOW);

    transfer(0x00);
    transfer(0x01);
    transfer(0x02);
    transfer(0x03);

    bcm2835_spi_end();

    return 0;
}

这个的输出是

Rx:  00 
Rx:  AD 
Rx:  00 
Rx:  1D 

应该是这样的

Rx:  AD 
Rx:  1D 
Rx:  ED 
Rx:  01

任何帮助都将不胜感激,因为目前我无法从加速度计获取数据,直到我明白为什么这种简单的通信不起作用。

【问题讨论】:

  • 您是否选择了正确的时钟极性和相移。
  • 如果主服务器传输数据,它同时接收来自客户端的数据。所以你不能在传输后直接读取你的 cmd 的结果。所以发送初始 cmd 并浪费结果。在接收上一个 cmd 的数据的同时发送下一个 cmd。以此类推
  • 我相信是的。手册说 CPOL = 0 和 CPHA = 0。
  • 为什么只打印接收到的第二个字节?这是它应该如何工作的?
  • 这就是为什么我发送一个长度为 2 的缓冲区 - 第一个用于寄存器,第二个用于结果。每次,都会打印缓冲区数组中的第二个索引。

标签: c raspberry-pi spi


【解决方案1】:

我认为问题在于位 0 告诉设备它是读还是写。我不熟悉 W 上方的条形符号(请随时纠正我),但从我的结果来看,我猜它必须是 1 才能读取,这就是为什么 0x00 变成 0x01,0x01 变成 0x03,0x02 变成0x05 等,因为寄存器地址需要上移 1 位以允许 RW 位。

ADXL355 SPI Protocol

如果它对其他人有帮助,通过更改如下所示的传递函数,寄存器现在匹配:

void transfer(char charToTransfer, int read)
{
    char buffer[] = { (charToTransfer << 1) + read , 0x00};
    bcm2835_spi_transfern(buffer, sizeof(buffer));
    if(read)
    {
        printf("Rx:  %02X \n", buffer[1]);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2020-06-11
    • 2021-01-11
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2019-06-14
    相关资源
    最近更新 更多