Kendryte K210 陀螺仪R6082V的调试记录

陀螺仪R6082V其实不难,算法这块已经是做好了,只需要将数据读取出来即可。但是中间也遇到了点小问题,记录一下。

首先是配置方面了,在硬件配置方面有一个脚是值得关注的,就是配置模式的引脚(第1脚)

Kendryte K210 陀螺仪R6082V的调试记录_第1张图片

这个应该算是一个低级错误了,怪我自己。一开始我直接就直接的设置高电平,但后面完全抓不到数据,注意,这里的意思是接地为uart模式,上拉为i2c模式。

因为芯片一开始上电的时候就会去确认这个引脚的电平,如果是使用K210直接给高低电平,因为给高低电平的时候本身是有延时的,所以是不能这么进行配置的。

而且这个模块买来上面也没有上拉电阻,所以如果想用i2c模式必须要把这个脚给上拉了,使用uart模式最好是接地,悬空状态下虽然也行,但是最好还是接上吧。

因为看手册是可以看到,i2c模式下可以采集到的数据是很多的,所以优先选择i2c模式,那么代码如下:Kendryte K210 陀螺仪R6082V的调试记录_第2张图片

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
static handle_t i2c;
static handle_t dev0;

int R6082V_init(void)
{
    handle_t piohs = io_open("/dev/gpio0");
    gpio_set_drive_mode(piohs, 10, GPIO_DM_OUTPUT);
    gpio_set_pin_value(piohs, 10, GPIO_PV_LOW);
    usleep(100*1000);
    gpio_set_pin_value(piohs, 10, GPIO_PV_HIGH);   
    usleep(1000*1000);//这里的延时需要长一些,因为直接去读取的话会有错误
    io_close(piohs);
    return 0;
}

int R6082V_get_deviece(void)
{
    i2c = io_open ("/dev/i2c0");
    dev0 = i2c_get_device (i2c , 0x35 , 7);
    i2c_dev_set_clock_rate (dev0 , 200000);
    return 0;
}

int R6082V_set_to_zero(int mode)
{
    uint8_t data_buf [3] = {0x00,(mode?0xaa:0x00),(mode?0xaa:0x00)};
    
    io_write(dev0 , data_buf , 3);
    return 0;
}

int R6082V_recv_data(void)
{
    uint8_t reg = 0;    
    uint8_t temp[22],i;
    i2c_dev_transfer_sequential (dev0 , ® , 0, temp , 22);
    for(i=0 ; i<22 ; i++){
        printf("%x ",temp[i]);
    }  
    printf("\r\n");
    return 0;
}

int main(void)
{
    R6082V_init();

    R6082V_get_deviece();

    R6082V_set_to_zero(0);// 0为定位设置为0;1为软件复位
    
    while(1){

        R6082V_recv_data();

    }
}

这里的i2c读取与我们平常的读取数据是有区别的,这里是直接读取即可,不需要先发地址寄存器,由上面的表格可以看出。

你可能感兴趣的:(Kendryte,K210)