人工智能与机器人技术论坛

标题: 关于 ICM 4** 陀螺仪的共用SPI或者I2C总线的问题 [打印本页]

作者: adminbbs    时间: 5 天前
标题: 关于 ICM 4** 陀螺仪的共用SPI或者I2C总线的问题
我们在研发过程中分析,此系类的陀螺仪芯片在和**模块例如FLASH共用SPI总线或者I2C总线的过程中,就算CS脚拉搞使其无法工作,依然有可能对总线产生影响 导致总线上的**芯片无法工作,所以在使用 ICM42670等同系类芯片 要不不要共用,实在需要共用,那需要先把gsersen 芯片 先初始化,方法是 先读取ID,然后设置电源寄存器 使其休眠 ,然后才能让其处在一个稳定状态不影响总线,以下是ICM42607 的一个简单初始化例程:
/**
* @brief 共用SPI 总线 ICM42607 首先要配置一下 Gsenser 不然可能影响 FLASH SPI
*
*/
void gsenser_init_config(void)
{
    GPIO_SetPins(GPIO_PORT_C, GPIO_PIN_05);  //  FLASH power  en
    GPIO_ResetPins(GPIO_PORT_C, GPIO_PIN_04);  // gsenser power en


    GPIO_ResetPins(GPIO_PORT_D, GPIO_PIN_08);  //gsenser CS  --有效
    GPIO_SetPins(GPIO_PORT_A, GPIO_PIN_15);  //  FLASH cs--失效


    delay1ms(1000);

    char buf[10]={0};
    uint8_t id;
    uint8_t i=0;

    SWDT_FeedDog();

    while (1)
    {
        GPIO_ResetPins(GPIO_PORT_D, GPIO_PIN_08);  //  G CS
        id=bsp_spibyte(0x75|0x80);

        id=bsp_spibyte(0);

        sprintf(buf,"ID1=%X",id);
        tty_tran_buf(buf, 10);

        GPIO_SetPins(GPIO_PORT_D, GPIO_PIN_08);  //  G CS
        delay1ms(1000);
        if(id==0x61)
        {
            GPIO_ResetPins(GPIO_PORT_D, GPIO_PIN_08);  //  G CS
            // bsp_spibyte(0x06);
            // bsp_spibyte(0x01);

            bsp_spibyte(0x1f);
            bsp_spibyte(0x1f);

            // bsp_spibyte(0x2c);
            // bsp_spibyte(0x08);

            // bsp_spibyte(0x1f);
            // bsp_spibyte(0x06);

            // bsp_spibyte(0x21);
            // bsp_spibyte(0x68);

            break;
        }
        i++;
        if(i>3)
        {
            break;
        }
    }
    SWDT_FeedDog();
    GPIO_SetPins(GPIO_PORT_D, GPIO_PIN_08);  //  G CS
    GPIO_ResetPins(GPIO_PORT_A, GPIO_PIN_15);  //  FLASH
}






欢迎光临 人工智能与机器人技术论坛 (http://www.airobotbbs.com/) Powered by Discuz! X3.3