Перейти к содержанию
    

SPI1 в STM32F429 считывает 0 в младший бит

у меня всегда единица на входе.

Повесьте резистор вместо вашего устройства. Вряд ли будет читаться 0xFE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Повесьте резистор вместо вашего устройства. Вряд ли будет читаться 0xFE.

Дык, вам же говорят, что висит резистор. Ноль ом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык, вам же говорят, что висит резистор. Ноль ом.

И де вы такое прочитали? :rolleyes:

На ноль омов резисторов не бывает. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И де вы такое прочитали? :rolleyes:

На ноль омов резисторов не бывает. :laughing:

На выводе MISO лог 1, которая получается подключением к шине 3.3В.

В регистре данных SPI принимаем 0xFE, т.е. младший бит равен нулю. Откуда?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На выводе MISO лог 1, которая получается подключением к шине 3.3В.

"Подключением" чего? Резистора 0 Ом? Где... вы такое прочитали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Подключением" чего? Резистора 0 Ом? Где... вы такое прочитали?

На пине микроконтроллера с AF SPI_MISO логическая единица, а приемник стабильно принимает байт с нулем в младшем разряде.

Чего еще не понятно? Нигде этого не читал, сам с этим столкнулся и долго бодался. Было на каком-то SPI, на каком-то пине,

(подробностей не помню, т.к. 2 года прошло) перешел на другие пины и другой номер SPI - чудеса пропали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На пине микроконтроллера с 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С железным подвешенным резистором можно быстрее докопаться до сути проблемы, чем с неким устройством, висящим в сбросе (может, и не выдающем единицу, а находящимся в высокоимпедансном состоянии).

С чего вы вообще взяли некое устройство? В #7 и #15 сообщениях сказано "на MISO жестко стоит единица".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С чего вы вообще взяли некое устройство? В #7 и #15 сообщениях сказано "на MISO жестко стоит единица".

С первого же сообщения (slave устройство...) и до последнего от топикстартера.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С первого же сообщения...

Дык, это была всего-лишь иллюстрация странного поведения. Затем русским-по-белому говорилось о жесткой единице.

Подтверждаю, что сам сталкивался на stm32f429i-disco с аналогичной ситуацией.

Сначала получал от слейва левый "нолик", затем довел ситуацию до предела - подключил MISO к 3.3В, а считывалось 0xFE.

Перешел на другой порт и другие пины - и слейв прекрасно заработал. В эррате не нашел сей глюк, для себя отметил, может,

экземпляр МК с дефектом. Похоже, что нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Перешел на другой порт и другие пины - и слейв прекрасно заработал. В эррате не нашел сей глюк, для себя отметил, может,

экземпляр МК с дефектом. Похоже, что нет.

Вы просто не докопались до сути проблемы, вот на что это похоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы просто не докопались до сути проблемы, вот на что это похоже.

Я особо и не копал. Посмотрел эррату, Интернет - все тихо. Значит проблема у меня.

Решил ее по-другому - без копания и костылей. Сейчас оказывается, что не только у меня.

Посмотрим на решение. Была бы у вас stm32f429i-disco, могли бы сами проверить и предложить решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Код отсылки/приёма байта по SPI в студию...

Давно то было. Допускаю, что примерно так было

	//---------------------------------------------------------------------------
// 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 байт давал нулевой младший бит (вроде только в первом принимаемом байте, а не в каждом).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрим на решение. Была бы у вас stm32f429i-disco, могли бы сами проверить и предложить решение.

У меня есть STM32F429I-Disco. Если выложите код, похожий на нерабочий, могу посмотреть. Но с нуля писать лень. Вдруг не не заработает. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...