ViKo 1 17 июня, 2016 Опубликовано 17 июня, 2016 · Жалоба у меня всегда единица на входе. Повесьте резистор вместо вашего устройства. Вряд ли будет читаться 0xFE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 июня, 2016 Опубликовано 17 июня, 2016 · Жалоба Повесьте резистор вместо вашего устройства. Вряд ли будет читаться 0xFE. Дык, вам же говорят, что висит резистор. Ноль ом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 июня, 2016 Опубликовано 17 июня, 2016 · Жалоба Дык, вам же говорят, что висит резистор. Ноль ом. И де вы такое прочитали? :rolleyes: На ноль омов резисторов не бывает. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 июня, 2016 Опубликовано 17 июня, 2016 · Жалоба И де вы такое прочитали? :rolleyes: На ноль омов резисторов не бывает. :laughing: На выводе MISO лог 1, которая получается подключением к шине 3.3В. В регистре данных SPI принимаем 0xFE, т.е. младший бит равен нулю. Откуда? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба На выводе MISO лог 1, которая получается подключением к шине 3.3В. "Подключением" чего? Резистора 0 Ом? Где... вы такое прочитали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба "Подключением" чего? Резистора 0 Ом? Где... вы такое прочитали? На пине микроконтроллера с AF SPI_MISO логическая единица, а приемник стабильно принимает байт с нулем в младшем разряде. Чего еще не понятно? Нигде этого не читал, сам с этим столкнулся и долго бодался. Было на каком-то SPI, на каком-то пине, (подробностей не помню, т.к. 2 года прошло) перешел на другие пины и другой номер SPI - чудеса пропали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба На пине микроконтроллера с 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба С железным подвешенным резистором можно быстрее докопаться до сути проблемы, чем с неким устройством, висящим в сбросе (может, и не выдающем единицу, а находящимся в высокоимпедансном состоянии). С чего вы вообще взяли некое устройство? В #7 и #15 сообщениях сказано "на MISO жестко стоит единица". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба С чего вы вообще взяли некое устройство? В #7 и #15 сообщениях сказано "на MISO жестко стоит единица". С первого же сообщения (slave устройство...) и до последнего от топикстартера. Поскольку есть устройство, то гарантии, что оно выдает мощную единицу всегда - нет. Топикстартер мог даже и не разглядеть кратковременного провала в цепи, в зависимости от качества осциллографа и квалификации "наблюдателя". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба С первого же сообщения... Дык, это была всего-лишь иллюстрация странного поведения. Затем русским-по-белому говорилось о жесткой единице. Подтверждаю, что сам сталкивался на stm32f429i-disco с аналогичной ситуацией. Сначала получал от слейва левый "нолик", затем довел ситуацию до предела - подключил MISO к 3.3В, а считывалось 0xFE. Перешел на другой порт и другие пины - и слейв прекрасно заработал. В эррате не нашел сей глюк, для себя отметил, может, экземпляр МК с дефектом. Похоже, что нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба То, что читалось 0xFE, связано с работой не по мануалу. Чтобы убедиться, я и предложил повесить резистор. Во всяком случае, подключенный "щуп" осциллографа уж точно не должен был влиять на разное чтение, если там висит единица всегда. Перешел на другой порт и другие пины - и слейв прекрасно заработал. В эррате не нашел сей глюк, для себя отметил, может, экземпляр МК с дефектом. Похоже, что нет. Вы просто не докопались до сути проблемы, вот на что это похоже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба Вы просто не докопались до сути проблемы, вот на что это похоже. Я особо и не копал. Посмотрел эррату, Интернет - все тихо. Значит проблема у меня. Решил ее по-другому - без копания и костылей. Сейчас оказывается, что не только у меня. Посмотрим на решение. Была бы у вас stm32f429i-disco, могли бы сами проверить и предложить решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 18 июня, 2016 Опубликовано 18 июня, 2016 · Жалоба Код отсылки/приёма байта по SPI в студию... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 19 июня, 2016 Опубликовано 19 июня, 2016 · Жалоба Код отсылки/приёма байта по 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 байт давал нулевой младший бит (вроде только в первом принимаемом байте, а не в каждом). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 19 июня, 2016 Опубликовано 19 июня, 2016 · Жалоба Посмотрим на решение. Была бы у вас stm32f429i-disco, могли бы сами проверить и предложить решение. У меня есть STM32F429I-Disco. Если выложите код, похожий на нерабочий, могу посмотреть. Но с нуля писать лень. Вдруг не не заработает. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться