|
|
  |
STM32F4Discovery SPI, сигнал CS, что-то пошло не так |
|
|
|
Sep 10 2015, 04:43
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(ilkz @ Sep 9 2015, 15:49)  Друзья, не могу понять в чем дело. На эту тему уже было большое обсуждение. Вкратце вывод таков: надо ждать RXNE, и потом ещё несколько тактов, в зависимости от скорости и режима SPI.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 10 2015, 07:58
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084

|
Ладно, с этм разберусь когда железяку запущу хоть как-то. Идея в целом понятна. По результатам дам знать. Спасибо за разжевывание ))) Пока что возник следующий проблем: Что-то записываю в слейв, потом пытаюсь прочитать и... не вижу клока для чтения. Код void mcp_read(uint8_t addr) { GPIO_ResetBits(GPIOB, GPIO_Pin_11); spi2_send(0x41); spi2_send(addr); SPI_I2S_ReceiveData(SPI2); GPIO_SetBits(GPIOB, GPIO_Pin_11); }
...
mcp_write(0x05, 0x20); // IOCON mcp_write(0x00, 0x00); // IODIR mcp_write(0x01, 0xA5); // IPOL mcp_read(0x01); // IPOL Я вижу что слейв что-то пытается выдать на свой SDO, но т.к. нет клока, то слейв обламывается и мой мастер ничего не принимает... Что за очередной бред? (Мы щас пока не трогаем всякие прерывания и прочие DMA). Соответственно, никакие прерывания не дергаются.
Сообщение отредактировал ilkz - Sep 10 2015, 08:03
|
|
|
|
|
Sep 10 2015, 08:57
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Потому что StdLib - ад и ужас. Клок на шине выставляет мастер. Чтобы он это сделал, ему надо сказать "передавай". Этот StdLib так не делает, хотя, если судить только по названиям функций, должен. Т.е. берём и делаем ОДНУ функцию Код uint8_t Rw(uint8_t out = 0xFF) { SPIx->DR = out; while (!(SPIx->SR & SPI_SR_RXNE)); return SPIx->DR; } (украдено из Stm32tpl авторства AHTOXA) и вызываем (сиплюсплюс): Код mcp.Active (); mcp.Rw (0x41); mcp.Rw (addr); uint8_t res = mcp.Rw (); mcp.Deactive (); return res;
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Sep 11 2015, 06:30
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084

|
Цитата(esaulenka @ Sep 10 2015, 11:57)  Потому что StdLib - ад и ужас.
Клок на шине выставляет мастер. Чтобы он это сделал, ему надо сказать "передавай". Этот StdLib так не делает, хотя, если судить только по названиям функций, должен. Т.е. берём и делаем ОДНУ функцию Т.е., чтобы что-то прочитать - надо что-то записать. Люююто. А как быть, если нужно прочитать много байт, а слейв не допускает dummy-записей? Ну, то есть, во время записи dummy-слов слейв может на них как-то отреагировать, т.к. для него это будут команды какие-нибудь.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|