|
stm32f407 SPI обнаружил косяк |
|
|
|
 |
Ответов
|
Jan 11 2013, 16:01
|

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

|
Я тут проделал несколько опытов, чтобы разобраться с различиями в использовании RXNE и BSY. И вот что вышло. Условия эксперимента. Я смотрел осциллограммы двух функций. Вот эта отключает чипселект по RXNE: Код void testRXNE(SPI_TypeDef* spi){ CS::On(); spi->DR = 0xAA; while (!(spi->SR & SPI_SR_RXNE)); spi->DR; spi->DR = 0xAA; while (!(spi->SR & SPI_SR_RXNE)); CS::Off(); spi->DR; } А вот эта - по BSY: Код void testBSY(SPI_TypeDef* spi){ CS::On(); spi->DR = 0xAA; while (!(spi->SR & SPI_SR_TXE)); spi->DR = 0xAA; while ((spi->SR & SPI_SR_BSY)); CS::Off(); spi->DR; } (Считывание DR в конце функций производится после сброса чипселекта, чтобы не влиять на время реакции.) Проверял на F103 и F407. Результаты совпадают. (Картинки с F103) Легенда: Жёлтый - клок, синий - чипселект. Результаты.Первое. Всё-таки BSY не ждёт окончания передачи последнего клока. На маленьких частотах это особенно заметно (картинка идентична для обеих функций):
Второе. На больших скоростях BSY возникает даже раньше, чем RXNE! (100ns в клетке) :
Вывод. Я не знаю, для чего придумали флаг BSY, но для управления чипселектом он точно не подходит
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jan 11 2013, 17:24
|

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

|
Цитата(AHTOXA @ Jan 11 2013, 19:01)  Первое. Всё-таки BSY не ждёт окончания передачи последнего клока. На маленьких частотах это особенно заметно (картинка идентична для обеих функций): Развертка какая по времени? Цитата Второе. На больших скоростях BSY возникает даже раньше, чем RXNE! (100ns в клетке) : Какая тактовая частота у процессора? Что-то много времени проходит. Неплохо бы взглянуть на ассемблерный код. Возможно, разница по времени возникает из-за разных команд. Проверил на своем коде. Обратите внимание, чип селект поднимается до объединения по или. А в другом случае - после! Код ;;;1059 id |= SPI1->DR; // Memory capacity 0005a0 8980 LDRH r0,[r0,#0xc] ;;;1060 // while (SPI1->SR & SPI_SR_BSY); // ждать, если SPI занят ;;;1061 SMSS_OFF(); 0005a2 8311 STRH r1,[r2,#0x18] 0005a4 4318 ORRS r0,r0,r3 ;1059 Можно предположить, что BSY возникает после пересылки из DR в сдвиговый регистр, когда начинает работать автомат пересылки. А заканчивается, когда прочитан последний бит (в середине последнего такта). Дальше слово пересылается из сдвигового регистра в DR, и устанавливается RXNE. Цитата Вывод. Я не знаю, для чего придумали флаг BSY, но для управления чипселектом он точно не подходит  Вот с этим не согласен. Аргументы уже высказывал... "А по-моему, они одинаковые!" (с) - для данной задачи.
|
|
|
|
|
Jan 11 2013, 18:27
|

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

|
Цитата(ViKo @ Jan 11 2013, 23:24)  Развертка какая по времени? 1us в клетке. Цитата(ViKo @ Jan 11 2013, 23:24)  Какая тактовая частота у процессора? Что-то много времени проходит. Неплохо бы взглянуть на ассемблерный код. Возможно, разница по времени возникает из-за разных команд. Частота 72Мгц. Код: Код f012 0f01 tst.w r2, #1 d0fb beq.n 8000a60 <testRXNE(SPI_TypeDef*)+0x20> f44f 5c80 mov.w ip, #4096; 0x1000 f2c4 0c01 movt ip, #16385; 0x4001 2110 movs r1, #16 f8cc 1010 str.w r1, [ip, #16] Во втором случае код идентичный (только бит другой проверяется). То есть, собственно на установку ножки идёт 4 команды. Это всяко меньше, чем 250 нс. Так что полученная разница - это разница именно между RXNE и BSY. Цитата(ViKo @ Jan 11 2013, 23:24)  Проверил на своем коде. Обратите внимание, чип селект поднимается до объединения по или. А в другом случае - после! Этой сентенции не осилил. Цитата(ViKo @ Jan 11 2013, 23:24)  Вот с этим не согласен. Аргументы уже высказывал... "А по-моему, они одинаковые!" (с) - для данной задачи. Я свои тоже высказал, повторяться не буду.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jan 11 2013, 18:50
|

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

|
Цитата(AHTOXA @ Jan 11 2013, 21:27)  Этой сентенции не осилил. В моем листинге - три команды. Первая читает из DR в R0. Вторая загружает в GPIO BSRR, устанавливает CS в 1. Третья объединяет по или старшие байты идентификатора в R3 с младшим, только что прочитанным в R0. Хотя по C тексту установка CS идет последней. Компилятор Keil, оптимизация -O3. Зачем переставил, не знаю! Когда же проверял по BSY (закомментированная команда), всё шло по написанному. Насчет осциллограмм. (удалил неправильное) Флаги сформировались по фронту последнего такта (в данном случае). Определяется установками CPHA, CPOL. И задержка - некая аппаратная, вдобавок к программной. Что позволяет надеяться, что CS для ведомого устройства будет выдержан с запасом. пмсм
|
|
|
|
Сообщений в этой теме
SasaVitebsk stm32f407 SPI обнаружил косяк Nov 16 2012, 10:45 VslavX Цитата(SasaVitebsk @ Nov 16 2012, 12:45) ... Nov 16 2012, 11:00 skripach Попробуйте проверять TXE, а не BSY. BSY это навер... Nov 16 2012, 11:07 SasaVitebsk Я конечно понимаю, но
ЦитатаBit 7 BSY: Busy flag
0... Nov 16 2012, 13:44 Flexz наверное не просто так в RM написано
ЦитатаNote: D... Nov 16 2012, 15:14 KnightIgor Цитата(Flexz @ Nov 16 2012, 17:14) наверн... Nov 16 2012, 22:37  VslavX Цитата(KnightIgor @ Nov 17 2012, 00:37) П... Nov 16 2012, 23:22  HHIMERA Цитата(KnightIgor @ Nov 17 2012, 02:37) П... Nov 16 2012, 23:23   SasaVitebsk Цитата(HHIMERA @ Nov 17 2012, 03:23) Да в... Nov 17 2012, 14:55  AHTOXA Цитата(KnightIgor @ Nov 17 2012, 04:37) Э... Nov 19 2012, 15:47   SasaVitebsk Цитата(AHTOXA @ Nov 19 2012, 18:47) Вот т... Nov 20 2012, 20:27   ViKo Цитата(AHTOXA @ Nov 19 2012, 18:47) Кстат... Jan 9 2013, 14:22    HHIMERA Цитата(ViKo @ Jan 9 2013, 17:22) Пробую п... Jan 9 2013, 15:36     ViKo Цитата(HHIMERA @ Jan 9 2013, 18:36) Это з... Jan 9 2013, 17:28      HHIMERA Цитата(ViKo @ Jan 9 2013, 21:28) Я провер... Jan 9 2013, 18:19       ViKo Цитата(HHIMERA @ Jan 9 2013, 21:19) Пусть... Jan 9 2013, 18:23        HHIMERA Ещё раз... не то же самое!!!
Когда нар... Jan 9 2013, 18:39         ViKo Цитата(HHIMERA @ Jan 9 2013, 21:39) Ещё р... Jan 9 2013, 19:09          HHIMERA Цитата(ViKo @ Jan 9 2013, 23:09) Покажите... Jan 9 2013, 19:33    AHTOXA Цитата(ViKo @ Jan 9 2013, 20:22) Насчет R... Jan 9 2013, 19:18     ViKo Цитата(AHTOXA @ Jan 9 2013, 22:18) Что зн... Jan 9 2013, 19:47      HHIMERA Цитата(ViKo @ Jan 9 2013, 23:36) а програ... Jan 9 2013, 19:48       ViKo Цитата(HHIMERA @ Jan 9 2013, 22:48) А пра... Jan 9 2013, 19:55        HHIMERA Цитата(ViKo @ Jan 9 2013, 23:55) Ржу-нима... Jan 9 2013, 20:03         ViKo Цитата(HHIMERA @ Jan 9 2013, 23:03) Продо... Jan 9 2013, 20:05        HHIMERA Цитата(ViKo @ Jan 9 2013, 23:55) Вы по пр... Jan 9 2013, 20:07      AHTOXA Цитата(ViKo @ Jan 10 2013, 01:47) по карт... Jan 9 2013, 20:30       ViKo Цитата(AHTOXA @ Jan 9 2013, 23:30) ... а ... Jan 9 2013, 20:53        HHIMERA Что вы референс не читали...
RXNE говорит только о... Jan 9 2013, 21:00         ViKo Цитата(HHIMERA @ Jan 10 2013, 00:00) Что ... Jan 9 2013, 21:02          Tahoe Цитата(ViKo @ Jan 10 2013, 01:02) Да ну? ... Jan 9 2013, 21:15          HHIMERA Цитата(ViKo @ Jan 10 2013, 00:02) Да ну? ... Jan 9 2013, 21:15        HHIMERA Цитата(ViKo @ Jan 9 2013, 23:53) И я прош... Jan 9 2013, 21:06         ViKo Цитата(HHIMERA @ Jan 10 2013, 00:06) О дё... Jan 9 2013, 21:13         ViKo Цитата(HHIMERA @ Jan 10 2013, 00:06) whil... Jan 9 2013, 21:20        AHTOXA Цитата(ViKo @ Jan 10 2013, 02:53) Не надо... Jan 9 2013, 21:18         Tahoe Цитата(AHTOXA @ Jan 10 2013, 01:18) Я лич... Jan 9 2013, 21:22         ViKo Цитата(AHTOXA @ Jan 10 2013, 00:18) Я лич... Jan 9 2013, 21:48          HHIMERA Цитата(ViKo @ Jan 10 2013, 00:38) Фантази... Jan 9 2013, 21:51          Tahoe Цитата(ViKo @ Jan 10 2013, 01:48) О том, ... Jan 9 2013, 22:00  sidy Цитата(KnightIgor @ Nov 17 2012, 02:37) 1... Dec 18 2012, 13:47   Danis Цитата(sidy @ Dec 18 2012, 17:47) Не полу... Dec 18 2012, 17:04  sidy Цитата(KnightIgor @ Nov 17 2012, 02:37) 1... Dec 19 2012, 09:25   AHTOXA Цитата(sidy @ Dec 19 2012, 15:25) И еще о... Dec 19 2012, 09:36    sidy Цитата(AHTOXA @ Dec 19 2012, 13:36) Скоре... Dec 19 2012, 15:35 HHIMERA Цитата(SasaVitebsk @ Nov 16 2012, 13:45) ... Nov 16 2012, 18:34 SasaVitebsk Цитата(HHIMERA @ Nov 16 2012, 22:34) ника... Nov 16 2012, 19:09 cyb Похоже у меня подобная проблема на STM32F103VE. По... Dec 19 2012, 13:58 AHTOXA Цитата(cyb @ Dec 19 2012, 19:58) Похоже у... Dec 19 2012, 14:22  cyb Цитата(AHTOXA @ Dec 19 2012, 16:22) У вас... Dec 19 2012, 17:02 AHTOXA Цитата(sidy @ Dec 19 2012, 21:35) Привожу... Dec 19 2012, 17:36 sidy Цитата(AHTOXA @ Dec 19 2012, 21:36) Хорош... Dec 20 2012, 04:08  AHTOXA А чему равно Rx_Data?
Как настроен SPI, какие прер... Dec 20 2012, 04:28   sidy Цитата(AHTOXA @ Dec 20 2012, 08:28) А чем... Dec 20 2012, 04:51 sidy Посмотрел я сейчас осциллограммы и кажется (если я... Dec 20 2012, 06:41 AHTOXA Цитата(sidy @ Dec 20 2012, 10:51) Кодvoid... Dec 20 2012, 07:16 cyb ЦитатаКак я понял для поднятия CS нужно ждать когд... Dec 20 2012, 09:22 sidy Спасибо за разъяснения. Задам еще вопрос здесь по ... Dec 21 2012, 12:08 AHTOXA Похоже, MISO сконфигурирован как выход. Dec 21 2012, 15:32  HHIMERA "Песец... серебристый."(С)
Цитата(AH... Jan 11 2013, 16:41   AHTOXA Цитата(HHIMERA @ Jan 11 2013, 22:41) Note... Jan 11 2013, 17:04  Tahoe Цитата(AHTOXA @ Jan 11 2013, 20:01) Перво... Jan 11 2013, 19:14   ViKo Цитата(Tahoe @ Jan 11 2013, 22:14) Сейчас... Jan 11 2013, 19:20 Tahoe На форуме ST были разборки с SPI_NSS и флагами, го... Jan 11 2013, 19:24 HHIMERA Не секрет, что все эти флаги не обязательны...
Что... Jan 11 2013, 19:53 AHTOXA Цитата(Tahoe @ Jan 12 2013, 01:14) Наскол... Jan 11 2013, 20:30 Огурцов Можно я тут со своими аналогичными глупостями влез... Jan 12 2013, 01:12  AHTOXA Цитата(Огурцов @ Jan 12 2013, 07:12) Вот ... Jan 12 2013, 05:34   Огурцов Не проверял. По-любому проверки флага готовности о... Jan 12 2013, 07:37 ViKo Цитата(AHTOXA @ Jan 11 2013, 23:30) Вот в... Jan 12 2013, 07:40  Огурцов А что с атмелом не так ? у мег такой ерунды не был... Jan 12 2013, 07:43 ViKo Цитата(AHTOXA @ Jan 11 2013, 23:30) Кстат... Jan 12 2013, 08:13  AHTOXA Цитата(ViKo @ Jan 12 2013, 13:40) Пусть б... Jan 12 2013, 09:01   ViKo Цитата(AHTOXA @ Jan 12 2013, 12:01) Как в... Jan 12 2013, 09:35 Tahoe ЦитатаI've never used slave mode without DMA b... Jan 13 2013, 15:44 AHTOXA Цитата(Tahoe @ Jan 13 2013, 21:44) Цитата... Jan 13 2013, 16:15  Tahoe Цитата(AHTOXA @ Jan 13 2013, 20:15) Судя ... Jan 13 2013, 22:43   AHTOXA Понятно, что этот код работает. Но точно так же он... Jan 14 2013, 05:28 Tahoe Речь про "сакральный смысл" флага BSY. Н... Jan 14 2013, 06:56 AHTOXA Так как раз его вариант и не раскрывает "сакр... Jan 14 2013, 07:36 ViKo Цитата(Tahoe @ Jan 14 2013, 09:56) Речь п... Jan 14 2013, 08:30  Tahoe Цитата(ViKo @ Jan 14 2013, 12:30) Смысл B... Jan 14 2013, 09:05   ViKo Цитата(Tahoe @ Jan 14 2013, 12:05) Так во... Jan 15 2013, 12:57    HHIMERA Приведённый вами код, как частный случай, ни о чём... Jan 15 2013, 13:41    AHTOXA Цитата(ViKo @ Jan 15 2013, 18:57) Коль уж... Jan 15 2013, 13:57     HHIMERA Цитата(AHTOXA @ Jan 15 2013, 16:57) С дру... Jan 15 2013, 14:17     ViKo Цитата(AHTOXA @ Jan 15 2013, 16:57) С дру... Jan 15 2013, 16:18      AHTOXA Цитата(ViKo @ Jan 15 2013, 22:18) Может в... Jan 15 2013, 16:46 ViKo Докладываю.
Посылаю в длинный последовательный рег... Mar 12 2013, 18:14 ViKo И еще.
Для переключения полярности синхроимпульсов... Mar 13 2013, 04:38 ASDFG123 Как правильно написать функцию отправки 16 бит по ... Mar 13 2016, 12:47 Alechek Подниму тут тему.
Странно, что обсуждают только ST... Jun 22 2018, 08:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|