Здравствуйте
Пытаюсь достучатся до датчика BME280.
Хочу считать с него ID.
На осциллографе видно только посылку с МК на датчик: 8 бит отсылается. Т.е. видно 8 синхроимпульсов и 8 бит адреса регистра. Следующих 8 синхроимпульсов для формирования ответной посылки датчиком не выдает МК.
Если вывод МК MISO оставить не подключеный к датчику, МК все равно будет выдавать синхроимпульсы для формирования ответа датчиком или МК анализирует вход MISO перед активизацией приема?
Это датчик не реагирует или не правильно настроен SPI в МК?
Настройка SPI0:
Код
SPI_CFG_T spiCfg;
SPI_DELAY_CONFIG_T spiDelayCfg;
/* Initialize SPI Block */
Chip_SPI_Init(LPC_SPI0);
/* Set SPI Config register */
spiCfg.ClkDiv = 0x9F; // Set Clock divider to 500 kb/s FPCLK=80 MHz (80e6/500e3=160, ClkDiv=160-1=159)
spiCfg.Mode = SPI_MODE_MASTER; // Enable Master Mode
spiCfg.ClockMode = SPI_CLOCK_MODE0; // Enable SPI Mode 0; CPHA=0, CPOL=0
spiCfg.DataOrder = SPI_DATA_MSB_FIRST; // Transmit MSB first
/* Slave select polarity is active low */
spiCfg.SSELPol = (SPI_CFG_SPOL0_LO | SPI_CFG_SPOL1_LO | SPI_CFG_SPOL2_LO | SPI_CFG_SPOL3_LO);//SPI Configuration register CFG p.397
LPC_SPI0->CFG &= (~SPI_CFG_LBM_EN) & SPI_CFG_BITMASK;
Chip_SPI_SetConfig(LPC_SPI0, &spiCfg);
/* Set Delay register */
spiDelayCfg.PreDelay = 0;
spiDelayCfg.PostDelay = 0;
spiDelayCfg.FrameDelay = 0;
spiDelayCfg.TransferDelay = 0;
Chip_SPI_DelayConfig(LPC_SPI0, &spiDelayCfg);
/* Enable SPI0 */
Chip_SPI_Enable(LPC_SPI0);
NVIC_EnableIRQ(SPI0_IRQn);// Enable SPI0 interrupt
Передача с ожиданием приема:
Код
//Peredacha s priyomom
Chip_SPI_Int_Cmd(LPC_SPI0,SPI_INTENSET_RXRDYEN,ENABLE);//Разрешение прерывания только при приеме
Chip_SPI_SetControlInfo(LPC_SPI0, 8, XferSetup.ssel | SPI_TXCTL_EOF | SPI_TXDATCTL_EOT);
Chip_SPI_SendLastFrame(LPC_SPI0, mas_buf[0]>>8, XferSetup.DataSize, SPI_TXCTL_ASSERT_SSEL0);