为BMI160设置SPI

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
8个帖子/ 0新
最后一篇
Imaginesam.
离线
最后一次露面:10个月2周前
加入:2017-06-08 09:00
为BMI160设置SPI

你好,

我正在尝试在DA14681开发套件中与BMI160进行沟通。

我正在使用peripherals_demo示例并尝试调用bmi160_get_chip_id来测试连接。但是,它只是返回0xFF,而不是D1的实际芯片ID。

dev = ad_spi_open(bmi160);
UINT8_T WBUF [2] = {0};

ad_spi_transact(dev,wbuf,1,reg_data,1);

if(reg_data [0] == 0xd1)
{
REG_DATA [1] = 0xA;
}
别的
{
REG_DATA [2] = 0x05;
}
ad_spi_close(dev);

引脚配置如下:

hw_gpio_pinconfig(hw_gpio_port_3,hw_gpio_pin_2,output_push_pull,spi_clk,true),
hw_gpio_pinconfig(hw_gpio_port_3,hw_gpio_pin_0,output_push_pull,spi_do,true),
hw_gpio_pinconfig(hw_gpio_port_3,hw_gpio_pin_1,输入,spi_di,true),
hw_gpio_pinconfig(hw_gpio_port_3,hw_gpio_pin_3,output_push_pull,spi_en,true),

SPI_SLAVE_DEVICE(SPI1,BMI160,HW_GPIO_PORT_3,HW_GPIO_PIN_3,
hw_spi_word_8bit,hw_spi_pol_high,hw_spi_pha_mode_1,
hw_spi_freq_div_2,hw_dma_channel_0);

谢谢,
萨姆

设备:
mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨Imaginesam,

嗨Imaginesam,

我没有看到您附加的代码上的任何问题。您正在使用的Pro套件子板具有QFN或CSP包?由于CSP封装上不可用端口3。同时尝试使用逻辑分析仪测试,检查680中是否有信号,以验证代码是否切换了引脚。

谢谢mt_dialog.

Imaginesam.
离线
最后一次露面:10个月2周前
加入:2017-06-08 09:00
嗨mt_dialog,

嗨mt_dialog,

包装是QFN(我相信DA14681可穿戴套件只有这个包装?)。

读取和写入功能似乎在提供的可穿戴设备固件(DA14681_WRBL_V_1.150.6)中,但在更轻量级的项目中使用相同的引脚时,它无法工作。是否有可能有其他必需的配置可以使其工作?

真挚地,
萨姆

mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨Imaginesam,

嗨Imaginesam,

是的,疲惫不堪的QFN包装(你没有提到你使用的套件)。

在我拥有的那个数据表上的BMI160 P88的数据表中,似乎传感器要求当您即将读取时的字节序列的第一位应该是'1',所以实际上你应该从中发送什么68x是0x80而不是0x00,如果您在WBUF中放置0x80而不是0x00,您将获得BMI回复的ID。

谢谢mt_dialog.

Imaginesam.
离线
最后一次露面:10个月2周前
加入:2017-06-08 09:00
mt_dialog,

mt_dialog,

对不起,这是我的不好,我的意思是在DA14681穿戴开发套件中写下“BMI160”。

当您建议时,我添加了以下行,但它仍然无法正常工作。reg_data.为设备ID返回0。

WBUF [0] = WBUF [0] |0x80;

我也尝试了使用这种方法,这就是它在可穿戴固件中执行的方法,它不起作用:

UINT8_T REG_ADDR = 0x00;
UINT8_T REG_DATA [10] = {0};
spi_transfer_data转移[2] = {
{reg_addr,null,1},
{null,reg_data,cnt}
};

REG_ADDR = REG_ADDR |0x80;
ad_spi_complex_transact(dev,transfers,2);
void ad_spi_transact(spi_device dev,const uint8_t * wbuf,size_t wlen,uint8_t * rbuf,size_t rlen);

谢谢,
萨姆

mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨Imaginesam,

嗨Imaginesam,

使用BLE_ADV examples在可穿戴板上进行测试,使用适当的MODS抵消,以便使用以下#defines启用SPI硬件和SPI适配器:

#define dg_configspi_adapter

#define dg_configuse_hw_spi.

使用以下说明,我可以在调试模式下看到,数据从传感器发送回来是一个字节209 DEC或0xD1,指示BMI160的ID。

bmi160_dev = ad_spi_open(bmi160);
data_wbuf [0] | = 0x80;
ad_spi_transact(bmi160_dev,data_wbuf,1,reg_data,1);

谢谢mt_dialog.

Imaginesam.
离线
最后一次露面:10个月2周前
加入:2017-06-08 09:00
嗨mt_dialog.

嗨mt_dialog.

谢谢,使用ble_adv example我能够让它像你一样工作!我有一个实际的数据流进入。

但是否有任何想法为什么它在一个项目中工作而不是其他项目?我试过了ferientals_demo.pxp_reporter.

SDK可以是一个问题吗?BLE_ADV.在1.0.10 SDK中对我没有工作,这是我对其他项目的用途,但是当我更改为1.0.12 BLE_ADV开始工作时。

真挚地,
萨姆

mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨Imaginesam,

嗨Imaginesam,

也许你错过了任何配置,外围设备演示是一个非常加载的演示,具有一堆配置和设置,并且可以轻松地错过一些东西,无论如何sdk 1.0.12是SDK的最新版本,我也在测试了相同的代码并使用SDK 1.0.10上的完全相同的设置,并且在BLE_ADV演示中也可以在该SDK上运行。

谢谢mt_dialog.