реклама на сайте
подробности

 
 
> SPI в LPC1549
kolisnichenko_r
сообщение Jan 18 2016, 09:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Здравствуйте
Пытаюсь достучатся до датчика 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);
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
kolisnichenko_r
сообщение Jan 18 2016, 11:56
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Как настроить SPI0 в этом МК на прием?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 18 2016, 16:47
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Что вы подразумеваете под приемом? SPI - дуплексная шина. Когда ведущий передает байт по MOSI, он выдает такты и по этим тактам ведомый передает байт на MISO, который принимается ведущим. И никак иначе. Хотите что-то принять - передайте (что угодно, хоть мусор).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Jan 18 2016, 17:44
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(Сергей Борщ @ Jan 18 2016, 19:47) *
Что вы подразумеваете под приемом? SPI - дуплексная шина. Когда ведущий передает байт по MOSI, он выдает такты и по этим тактам ведомый передает байт на MISO, который принимается ведущим. И никак иначе. Хотите что-то принять - передайте (что угодно, хоть мусор).

Вот это да, не ожиданно так. Спасибо. Завтра проделаю таким способом.
А я все жду когда МК будет выдавать синхроимпульсы для датчика.
Спасибо!
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Jan 19 2016, 06:18
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Действительно, появился ответ от датчика.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016