人工智能与机器人技术论坛
标题:
关于 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