Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI в LPC1549
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
kolisnichenko_r
Здравствуйте
Пытаюсь достучатся до датчика 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);
kolisnichenko_r
Как настроить SPI0 в этом МК на прием?
Сергей Борщ
Что вы подразумеваете под приемом? SPI - дуплексная шина. Когда ведущий передает байт по MOSI, он выдает такты и по этим тактам ведомый передает байт на MISO, который принимается ведущим. И никак иначе. Хотите что-то принять - передайте (что угодно, хоть мусор).
kolisnichenko_r
Цитата(Сергей Борщ @ Jan 18 2016, 19:47) *
Что вы подразумеваете под приемом? SPI - дуплексная шина. Когда ведущий передает байт по MOSI, он выдает такты и по этим тактам ведомый передает байт на MISO, который принимается ведущим. И никак иначе. Хотите что-то принять - передайте (что угодно, хоть мусор).

Вот это да, не ожиданно так. Спасибо. Завтра проделаю таким способом.
А я все жду когда МК будет выдавать синхроимпульсы для датчика.
Спасибо!
kolisnichenko_r
Действительно, появился ответ от датчика.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.