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

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> SPI1 в STM32F429 считывает 0 в младший бит
ViKo
сообщение Jun 17 2016, 18:52
Сообщение #16


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Tarbal @ Jun 16 2016, 15:37) *
у меня всегда единица на входе.

Повесьте резистор вместо вашего устройства. Вряд ли будет читаться 0xFE.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 17 2016, 18:56
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ViKo @ Jun 17 2016, 21:52) *
Повесьте резистор вместо вашего устройства. Вряд ли будет читаться 0xFE.

Дык, вам же говорят, что висит резистор. Ноль ом.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 17 2016, 20:12
Сообщение #18


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(adnega @ Jun 17 2016, 21:56) *
Дык, вам же говорят, что висит резистор. Ноль ом.

И де вы такое прочитали? rolleyes.gif
На ноль омов резисторов не бывает. laughing.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 17 2016, 22:46
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ViKo @ Jun 17 2016, 23:12) *
И де вы такое прочитали? rolleyes.gif
На ноль омов резисторов не бывает. laughing.gif

На выводе MISO лог 1, которая получается подключением к шине 3.3В.
В регистре данных SPI принимаем 0xFE, т.е. младший бит равен нулю. Откуда?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 18 2016, 06:32
Сообщение #20


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(adnega @ Jun 18 2016, 01:46) *
На выводе MISO лог 1, которая получается подключением к шине 3.3В.

"Подключением" чего? Резистора 0 Ом? Где... вы такое прочитали?
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 18 2016, 08:40
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ViKo @ Jun 18 2016, 09:32) *
"Подключением" чего? Резистора 0 Ом? Где... вы такое прочитали?

На пине микроконтроллера с AF SPI_MISO логическая единица, а приемник стабильно принимает байт с нулем в младшем разряде.
Чего еще не понятно? Нигде этого не читал, сам с этим столкнулся и долго бодался. Было на каком-то SPI, на каком-то пине,
(подробностей не помню, т.к. 2 года прошло) перешел на другие пины и другой номер SPI - чудеса пропали.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 18 2016, 10:45
Сообщение #22


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(adnega @ Jun 18 2016, 11:40) *
На пине микроконтроллера с AF SPI_MISO логическая единица, а приемник стабильно принимает байт с нулем в младшем разряде.
Чего еще не понятно? Нигде этого не читал, сам с этим столкнулся и долго бодался. Было на каком-то SPI, на каком-то пине,
(подробностей не помню, т.к. 2 года прошло) перешел на другие пины и другой номер SPI - чудеса пропали.

Непонятно того, что из-за неправильного использования SPI (предполагаю, связано с периферийными тактами микроконтроллера), вы вдруг решили мне высказать несказанное, что на этом входе висит резистор. "Где имение, а где вода?" С железным подвешенным резистором можно быстрее докопаться до сути проблемы, чем с неким устройством, висящим в сбросе (может, и не выдающем единицу, а находящимся в высокоимпедансном состоянии).
Желаете дальше дискутировать насчет резистора 0 ом?

Цитата
Prior to changing the CPOL/CPHA bits the SPI must be disabled by resetting the SPE bit.

Цитата
It is recommended to enable the SPI slave before the master sends the clock. If not,
undesired data transmission might occur. The data register of the slave needs to be ready
before the first edge of the communication clock or before the end of the ongoing
communication. It is mandatory to have the polarity of the communication clock set to the
steady state value before the slave and the master are enabled.

Цитата
During discontinuous communications, there is a 2 APB clock period delay between the
write operation to SPI_DR and the BSY bit setting. As a consequence, in transmit-only
mode, it is mandatory to wait first until TXE is set and then until BSY is cleared after writing
the last data.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 18 2016, 11:24
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ViKo @ Jun 18 2016, 13:45) *
С железным подвешенным резистором можно быстрее докопаться до сути проблемы, чем с неким устройством, висящим в сбросе (может, и не выдающем единицу, а находящимся в высокоимпедансном состоянии).

С чего вы вообще взяли некое устройство? В #7 и #15 сообщениях сказано "на MISO жестко стоит единица".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 18 2016, 13:01
Сообщение #24


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(adnega @ Jun 18 2016, 14:24) *
С чего вы вообще взяли некое устройство? В #7 и #15 сообщениях сказано "на MISO жестко стоит единица".

С первого же сообщения (slave устройство...) и до последнего от топикстартера.
Поскольку есть устройство, то гарантии, что оно выдает мощную единицу всегда - нет. Топикстартер мог даже и не разглядеть кратковременного провала в цепи, в зависимости от качества осциллографа и квалификации "наблюдателя".
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 18 2016, 13:24
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ViKo @ Jun 18 2016, 16:01) *
С первого же сообщения...

Дык, это была всего-лишь иллюстрация странного поведения. Затем русским-по-белому говорилось о жесткой единице.
Подтверждаю, что сам сталкивался на stm32f429i-disco с аналогичной ситуацией.
Сначала получал от слейва левый "нолик", затем довел ситуацию до предела - подключил MISO к 3.3В, а считывалось 0xFE.
Перешел на другой порт и другие пины - и слейв прекрасно заработал. В эррате не нашел сей глюк, для себя отметил, может,
экземпляр МК с дефектом. Похоже, что нет.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 18 2016, 14:07
Сообщение #26


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



То, что читалось 0xFE, связано с работой не по мануалу. Чтобы убедиться, я и предложил повесить резистор. Во всяком случае, подключенный "щуп" осциллографа уж точно не должен был влиять на разное чтение, если там висит единица всегда.

Цитата(adnega @ Jun 18 2016, 16:24) *
Перешел на другой порт и другие пины - и слейв прекрасно заработал. В эррате не нашел сей глюк, для себя отметил, может,
экземпляр МК с дефектом. Похоже, что нет.

Вы просто не докопались до сути проблемы, вот на что это похоже.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 18 2016, 19:25
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ViKo @ Jun 18 2016, 17:07) *
Вы просто не докопались до сути проблемы, вот на что это похоже.

Я особо и не копал. Посмотрел эррату, Интернет - все тихо. Значит проблема у меня.
Решил ее по-другому - без копания и костылей. Сейчас оказывается, что не только у меня.
Посмотрим на решение. Была бы у вас stm32f429i-disco, могли бы сами проверить и предложить решение.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 18 2016, 20:04
Сообщение #28


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Код отсылки/приёма байта по SPI в студию...
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 19 2016, 08:38
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Genadi Zawidowski @ Jun 18 2016, 23:04) *
Код отсылки/приёма байта по SPI в студию...

Давно то было. Допускаю, что примерно так было
CODE
//---------------------------------------------------------------------------
// LED & BUTTON
//---------------------------------------------------------------------------
SPI_NSS_bit = 1;
for(i = 0; i < 3; i++) __NOP();
SPI_OE_bit = 0;
SPI_NSS_bit = 0;

SPI2->CR2 =
(0 << SPI_CR2_RXNEIE)
| (0 << SPI_CR2_TXDMAEN)
| (0 << SPI_CR2_RXDMAEN)
| (1 << SPI_CR2_SSOE);

DMA1_Stream4->CR =
(0 << DMA_SCR_PL)
| (0 << DMA_SCR_CHSEL)
| (1 << DMA_SCR_MINC)
| (1 << DMA_SCR_DIR)
| (0 << DMA_SCR_EN);

DMA1_Stream3->CR =
(0 << DMA_SCR_PL)
| (0 << DMA_SCR_CHSEL)
| (1 << DMA_SCR_MINC)
| (0 << DMA_SCR_DIR)
| (0 << DMA_SCR_EN);

DMA1->LIFCR = (0x3D << 22);
DMA1->HIFCR = (0x3D << 0);

for(i = 0; i < 10; i++) __NOP();

DMA1_Stream3->PAR = (DWORD)&SPI2->DR;
DMA1_Stream3->M0AR = (DWORD)spi_rx;
DMA1_Stream3->NDTR = SPI_SIZE;
DMA1_Stream3->CR =
(0 << DMA_SCR_PL)
| (0 << DMA_SCR_CHSEL)
| (1 << DMA_SCR_MINC)
| (0 << DMA_SCR_DIR)
| (1 << DMA_SCR_EN);

DMA1_Stream4->PAR = (DWORD)&SPI2->DR;
DMA1_Stream4->M0AR = (DWORD)spi_tx;
DMA1_Stream4->NDTR = SPI_SIZE;
DMA1_Stream4->CR =
(0 << DMA_SCR_PL)
| (0 << DMA_SCR_CHSEL)
| (1 << DMA_SCR_MINC)
| (1 << DMA_SCR_DIR)
| (1 << DMA_SCR_EN);

for(i = 0; i < 10; i++) __NOP();

SPI2->CR2 =
(0 << SPI_CR2_RXNEIE)
| (1 << SPI_CR2_TXDMAEN)
| (1 << SPI_CR2_RXDMAEN)
| (1 << SPI_CR2_SSOE);

Это рабочий код, т.к. использует SPI2 и DMA1.
Нерабочий был, вроде, на SPI4 и DMA2.
Отправка работала корректно, а прием 2 байт давал нулевой младший бит (вроде только в первом принимаемом байте, а не в каждом).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 19 2016, 15:28
Сообщение #30


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(adnega @ Jun 18 2016, 22:25) *
Посмотрим на решение. Была бы у вас stm32f429i-disco, могли бы сами проверить и предложить решение.

У меня есть STM32F429I-Disco. Если выложите код, похожий на нерабочий, могу посмотреть. Но с нуля писать лень. Вдруг не не заработает. rolleyes.gif
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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