BMI160

1.硬件spi的初始化
需要注意的是BMI160支持 2种模式,即:CPOL=0 and CPHA = 0;或者CPOL=1 and CPHA = 1。
2. 第一步读取chipid,看spi通讯是否正常。
第二步设置加速度和陀螺仪的量程;
第三步读取加速度和陀螺仪的数据。
此处没用中断。

void bmi160_init(void)
{   
    uint8_t ret = 0,i,imu_data[12]; 
    uint16_t acc_x,acc_y,acc_z;
    uint16_t gyr_x,gyr_y,gyr_z;
    //Read chip_id
    ret =  BMI160_Read_Reg(0x00);//0xD1
    if(ret != 0xD1){
        ret = 0;
    }
    //Config
    BMI160_Write_Reg( 0x41, 0x05);//acc_range
    ret =  BMI160_Read_Reg(0x41);
    if(ret != 0x05){
        ret = 0;
    }
    BMI160_Write_Reg( 0x43, 0x01);//gyr_range
    ret =  BMI160_Read_Reg(0x43);
    if(ret != 0x01){
        ret = 0;
    }
    while(1){
    //Read acc and gyr data
    for(i=0;i<12;i++){
        imu_data[i] = BMI160_Read_Reg(0x0C+i);//gyr acc
    }
    acc_x = imu_data[1]<<8 | imu_data[0];
    acc_y = imu_data[3]<<8 | imu_data[2];
    acc_z = imu_data[5]<<8 | imu_data[4];
    gyr_x = imu_data[7]<<8 | imu_data[6];
    gyr_y = imu_data[9]<<8 | imu_data[8];
    gyr_z = imu_data[11]<<8 | imu_data[10];
    ret  = 1;
}
uint8_t BMI160_Read_Reg(uint8_t reg)
{   
    uint8_t reg_val;     
    BMI160_CS = 0;        
    delay_ms(1);    
    SPI1_ReadWriteByte(reg | 0x80);  
    reg_val=SPI1_ReadWriteByte(0xFF);
    delay_ms(1);  
    BMI160_CS = 1;        
    return(reg_val);       
}

uint8_t BMI160_Write_Reg(uint8_t reg,uint8_t value)
{
    uint8_t status;  
    BMI160_CS=0;                 
    status =SPI1_ReadWriteByte(reg & 0x7f);
    SPI1_ReadWriteByte(value);     
    BMI160_CS=1;                
    return(status);               
}
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
全志R58的官方开发板加载bmi160驱动的步骤3B.txt 开发板:全志R58的官方开发板R58_PER3_LPDDR3_32X1_V1_1.pdf(板载加速度传感器bma250) 目标:外挂bmi160模块可以检测到加速度和角速度(acc+gyr/加速度传感器+陀螺仪) BSP:r58_20160823.tar.gz(2016/8/22从全志的git服务器拿下来的系统) 显示:HDMI输出1080p分辨率的LCD显示器。 计划步骤: 1、打通开发板上的bma250(证明开发板硬件是好的。全志官方的BSP也是好的。) 2、将驱动程序bma250.c中的bma250全部替换为bmi160,验证是可以加入新的gsensor的(陀螺仪类似)。 3、借用bma250.c这个驱动程序,初始化的部分修改为初始化bmi160,调通BMI160的gsensor部分。 4、完善全志/博世提供的bmi160的驱动程序,调通BMI160的gsensor部分。 (陀螺仪部分鱼刺类似,陀螺仪部分借用l3gd20.c来验证bmi160的gyr部分) 下面进行第三步:借用bma250.c这个驱动程序,初始化的部分修改为初始化bmi160,调通BMI160的gsensor部分。 为了方便观察,直接注释掉除了bma250之外的全部的gsensor: Z:\home\wwt\only_bma250_r58\android\device\softwinner\common\hardware-common\libhardware\libsensors\aw_sensors\sensorDetect.cpp struct sensor_extend_t gsensorList[] = { { { "bma250", LSG_BMA250, }, { "Bosch 3-axis Accelerometer", "Bosch Sensortec", 1, 0, SENSOR_TYPE_ACCELEROMETER, 4.0f*9.81f, (4.0f*9.81f)/1024.0f, 0.2f, 0,0,0, { }, }, }, }; Z:\home\wwt\only_bma250_r58\android\device\softwinner\octopus-perf\configs\gsensor.cfg ;Direction parameter adjustment, including the x, y, z axis, and xy interchange four variables, ;the name of the module used for identification, and drive registered name consistent ;-------------------------- ;name:bma250 ;-------------------------- gsensor_name = bma250 gsensor_direct_x = false gsensor_direct_y = true gsensor_direct_z = true gsensor_xy_revert = true Z:\home\wwt\only_bma250_r58\android\device\softwinner\octopus-perf\BoardConfig.mk #gsensor & Gyr sensor SW_BOARD_USES_SENSORS_TYPE = aw_sensors 注意:lunch的f1选项在HAL层中使用的ST的9轴(ACC+GYR+MAG)传感器。 #gsensor & Gyr sensor SW_BOARD_USES_SENSORS_TYPE = lsm9ds0 Z:\home\wwt\only_bma250_r58\android\device\softwinner\octopus-perf\init.sun8i.rc on boot # use automatic det

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值