在我写下我的问题之前,请允许我说,我已经访问了互联网上关于RPi4B、SPI、BMI088、bcm2835库和C的所有相关页面,没有运气,也没有很多挫折感。
我有6个BMI088传感器,我想通过SPI连接到RPi4B。在Arduino上,它与Bolder Flight library完美配合(一个或全部6个)。问题是,当我将传感器连接到RPi时,我没有从传感器获得任何信息。连接正常(3.3 V、接地、MISO、MOSI、SCK、CS、PS接地(仅BMI088))。我还有一个开关可以打开/关闭传感器电源。我发送的信息与Arduino库发送的信息完全相同,但我从传感器中什么也没有得到,味噌是无声的。我提供CSB1引脚的上升沿,如数据表所述。如果我连接MISO和MOSI,RPi将接收数据。
如何让BMI088通过SPI与RPi对话?
代码(不是全部,只是相关部分):
#include <bcm2835.h>
#include <stdio.h>
#define CS_PIN 25
unsigned char buffer[7] = {0};
int main(int argc, char *argv[])
{
int x1, x2, y1, y2, z1, z2;
if (!bcm2835_init())
{
printf("bcm2835_init failed.\n");
return 1;
}
if (bcm2835_init())
{
printf("bcm2835_init successful.\n");
}
if (!bcm2835_spi_begin())
{
printf("bcm2835_spi_begin failed.\n");
return 1;
}
if (bcm2835_spi_begin())
{
printf("bcm2835_spi_begin successful.\n");
}
bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST); // The default
bcm2835_spi_setDataMode(BCM2835_SPI_MODE0); // The default
bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_1); // The default
bcm2835_spi_chipSelect(BCM2835_SPI_CS_NONE); // The default
//bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS0, LOW); // the default
bcm2835_gpio_fsel(CS_PIN, BCM2835_GPIO_FSEL_OUTP); //CS is an output
bcm2835_gpio_clr(CS_PIN);
delayms(100);
while(1)
{
// chip ID
buffer[0] = 0x00; //ACC_CHIP_ID;
//buffer[1] = 30;
bcm2835_spi_transfer(0x00);
bcm2835_delayMicroseconds(100);
bcm2835_gpio_set(CS_PIN);
bcm2835_delayMicroseconds(100);
bcm2835_gpio_clr(CS_PIN);
bcm2835_spi_transfern(buffer, 1);
bcm2835_delayMicroseconds(100);
bcm2835_gpio_set(CS_PIN);
printf("\n\nID:\t0x%02X\t0x%02X\n", buffer[0], buffer[1]);
delayms(100);
// soft reset
buffer[0] = 0x7E;
buffer[1] = 0xB6;
bcm2835_spi_transfern(buffer, 2);
delayms(100);
printf("RESET:\t0x%02X\t0x%02X\n", buffer[0], buffer[1]);
delayms(100);
// set power
buffer[0] = 0x7D;
buffer[1] = 0x04;
bcm2835_spi_transfern(buffer, 2);
printf("POWER:\t0x%02X\t0x%02X\n", buffer[0], buffer[1]);
delayms(100);
// set mode
buffer[0] = 0x7C;
buffer[1] = 0x03;
bcm2835_spi_transfern(buffer, 2);
printf("MODE:\t0x%02X\t0x%02X\n", buffer[0], buffer[1]);
delayms(100);
// set range
buffer[0] = 0x41;
buffer[1] = 0x03;
bcm2835_spi_transfern(buffer, 2);
printf("RANGE:\t0x%02X\t0x%02X\n", buffer[0], buffer[1]);
delayms(100);
// set ODR
buffer[0] = 0x40;
buffer[1] = 0xAC;
bcm2835_spi_transfern(buffer, 2);
printf("RANGE:\t0x%02X\t0x%02X\n", buffer[0], buffer[1]);
delayms(100);
buffer[0] = 0x12;
buffer[1] = 0x13;
buffer[2] = 0x14;
buffer[3] = 0x15;
buffer[4] = 0x16;
buffer[5] = 0x17;
bcm2835_spi_transfern(buffer, 7);
x1 = buffer[1];
x2 = buffer[2];
y1 = buffer[3];
y2 = buffer[4];
z1 = buffer[5];
z2 = buffer[6];
printf("X:%d %d\tY:%d %d\tZ:%d %d\n", x1, x2, y1, y2, z1, z2);
delayms(500);
}
}
我知道问题出在哪里。显然,为了向传感器发送正确的字节(使用SPI),您必须对某些地址使用位掩码。BMI088数据表中未规定这一点。在我用逻辑分析仪检查了Arduino发送给传感器的内容之后,我发现了这一点,我还查看了BMI088 Arduino库。现在我得到了正确的数据。
我正在尝试使用Kafka Connect Elasticsearch连接器,但没有成功。它正在崩溃,并出现以下错误: 我已经在kafka子文件夹中解压了插件的编译版本,并在connect-standalone.properties中有以下代码行: 我可以看到该文件夹中的各种连接器,但Kafka Connect不加载它们;但它确实加载了标准连接器,如下所示: 如何正确注册连接器?
我试图使用带有Datastax Spark-Cassandra连接器的Spark查询Cassandra。火花代码是 我发现了另一个帖子,看起来类似的火花工作卡珊德拉错误,但它是一个不同的类,无法找到,所以我不确定它是否有帮助。
问题内容: 注意:我已经尝试过这里给出的其他解决方案,但是没有用 NodeJ的新手。我试图跟随AngularJS专业人士,并陷入设置NodeJs服务器。根据书,我安装了nodejs,然后使用npm install connect安装了connect软件包 然后将angularjs下载到nodejs文件夹旁边的文件夹中。然后编写server.js文件以连接到服务器。这是文件的内容: 当我使用以下命令
我正在尝试运行卡桑德拉,但每次它在连接时都会给出相同的错误...有什么我需要在配置文件或属性文件中编辑的吗? ('无法连接到任何服务器',{'127.0.0.1:9042 ':错误(61,"尝试连接到[('127.0.0.1 ',9042)]。最后一个错误:连接被拒绝")}) 启动cassandra时出错
我有一个kafka connect插件,部署在kafka集群中(在独立模式下,仅用于测试,目的是分布式完成)。这个Kafka连接插件使用curator连接到集群的zookeper,并从中提取一些信息,以决定如何处理这些消息。 代码如下: 在treeCache启动时超时,配置根路径存在于本地zookeeper中(已确认在zookeeper外壳中执行ls,对于我尝试使用的zkConnection字符串
使用来自DBCP的BasicDataSource,如果我们执行getConnection()并且在最后一个块中我们关闭连接,它是真的将连接返回到池还是关闭连接。我正在检查的代码片段是这样的 我正在检查BasicDataSource的源代码,并访问了这个包装类以获取连接。 委托对象的类型为java。sql。联系包装器代码调用委托的close方法,该方法将关闭集合,而不是将连接返回到池。这是DBCP的