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

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> SPI1 в STM32F429 считывает 0 в младший бит
ViKo
сообщение Jun 21 2016, 14:28
Сообщение #46


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

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



Еще бы и программный ногодрыг не работал... rolleyes.gif Четыре провода проложены, как положено. Это хорошо. Но мало.
Заметьте, у adnega все каналы SPI работают! А вы ссылаетесь на форум каких-то... неучей...
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 21 2016, 17:24
Сообщение #47


Гуру
******

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



Цитата(ViKo @ Jun 21 2016, 17:28) *
Заметьте, у adnega все каналы SPI работают!

Сейчас не получается воссоздать ошибку. Раньше точно помню, что замыкал MISO на 3.3В и получал 0xFE.
Допускаю:
1. тогда я где-то нокосячил;
2. сейчас использую простой проект (LTDC, SDRAM, SPIx), а тогда - куча SPI (кнопки и светодиоды на сдвиговых регистрах, цифровой микрофон, I2S-кодек),
таймеры (DS18B20, импульсы тестирования усилителей), UART (GSM, console), SDIO (uSD-карта), I2C (радио RDA5807). Все это густо разбавлено DMA.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jun 21 2016, 23:31
Сообщение #48


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(ViKo @ Jun 21 2016, 18:28) *
Еще бы и программный ногодрыг не работал... rolleyes.gif Четыре провода проложены, как положено. Это хорошо. Но мало.
Заметьте, у adnega все каналы SPI работают! А вы ссылаетесь на форум каких-то... неучей...

Не будьте так высокомерны. Это форум поддержки ST.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 22 2016, 05:04
Сообщение #49


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

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



Цитата(Tarbal @ Jun 22 2016, 02:31) *
Не будьте так высокомерны. Это форум поддержки ST.

И что с того? "Специалист" любого уровня может задать там тупейший вопрос. Как и здесь. Если не путаю, там был участник Cliv(не вспомню точный ник), вот он и утирал сопли направо и налево. Задайте и вы там вопрос. Гуглопереводчик-то доступен.
P.S. Нашел. clive1 он обзывается. Его ответам доверяю.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jun 22 2016, 21:43
Сообщение #50


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(ViKo @ Jun 22 2016, 09:04) *
И что с того? "Специалист" любого уровня может задать там тупейший вопрос. Как и здесь. Если не путаю, там был участник Cliv(не вспомню точный ник), вот он и утирал сопли направо и налево. Задайте и вы там вопрос. Гуглопереводчик-то доступен.
P.S. Нашел. clive1 он обзывается. Его ответам доверяю.


clive1 про чип селект что-то сказал, но когда я вывалил побольше информации, то он слинял. Он не сопли утирает, а работает в поддержке и отвечает на вопросы.
Мне гуглопереводчик не нужен. Я на аглицкой мове немного могу говорить sm.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 23 2016, 04:39
Сообщение #51


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

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



Ссылку на тему на ST выдайте, please!
"что-то сказал" слегка противоречит "переводчик не нужен" 01.gif
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jun 23 2016, 10:32
Сообщение #52


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(ViKo @ Jun 23 2016, 08:39) *
Ссылку на тему на ST выдайте, please!
"что-то сказал" слегка противоречит "переводчик не нужен" 01.gif


Вы как следователь на допросе. Я просто уже не помню что он сказал. То, что я работаю в Канаде слегка противоречит вашим подозрениям обо мне и о переводчике.
Написал он банальность:

Ok, so as the -ChipSelect goes high the slave will tri-state its output. So a) make sure you keep -CS low until you have clocked in the last bit, and cool.gif you are reading the slave output on the right edge of the clock
What SPI device is the slave?

Мой ответ:
Thank you for response.

First: CS starts going high one microsecond after the last clock transaction.
Second: In order to simplify the test I managed to neutralize the slave peripheral holding reset all the time. MISO output is a solid high and never changes. I read 0xFE instead of 0xFF. The same firmware operates with the same peripheral on SPI2. No problems observed. I got the same behavior on two different boards for SPI1 only. SPI2 connected to the same kind of slave (si3050 as dazy chain of 5) operates properly on both boards.

Коряво конечно, моя жена считает меня необучаемым языкам, но народ понимает что я имею ввиду.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Jun 23 2016, 17:45
Сообщение #53


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Извиняюсь, что немного не в тему, но ситуация тоже с SPI. Сегодня выкопал баг:
Код
byte SPIRead(byte reg)
{
    volatile short temp;
    temp=SPI2->DR;// Эти сделаны как заплатка. Без них получается какая-то шляпа
    temp=SPI2->DR;
    temp=SPI2->DR;
    CS_EN;
    SPI2->DR=reg|0x80;
    //busy=true; Это я в комментах расскажу
    while(!(SPI2->SR&SPI_SR_RXNE));
    //busy=false;
    CS_DIS;
    temp=SPI2->DR;
    temp>>=8;
    return temp;
}


Короче заметил девайс подвисает периодически. Начал дебажить - зависает в while(!(SPI2->SR&SPI_SR_RXNE));. Что в итоге происходит - пока ждем, возникает прерывание системного таймера. Он сам по себе устанавливает 1 флаг в 50 герц, по которому из главного цикла опрашивается акселерометр, это единственная его задача. После обработчика возвращаемся в цикл и больше никогда из него не выходим. То есть если в нем войти в обработчик, то бит RXNE не установится. Юзал бряк busy и через if(busy) в таймере понимал, что мы попали в прерывание во время цикла. В пошаговой отладке этот бит не устанавливается, хотя в ДШ четко сказано:

A read access to the SPIx_DR register must be managed by the RXNE event. This event is triggered when data is stored in RXFIFO and the threshold (defined by FRXTH bit) is reached. When RXNE is cleared, RXFIFO is considered to be empty.

Или по крайней мере этот бит очень быстро сбрасывается (не понятно почему)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 23 2016, 20:24
Сообщение #54


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

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



Цитата(Tarbal @ Jun 23 2016, 13:32) *
Вы как следователь на допросе...
The same firmware operates with the same peripheral on SPI2. No problems observed. I got the same behavior on two different boards for SPI1 only. SPI2 connected to the same kind of slave (si3050 as dazy chain of 5) operates properly on both boards.

Вам же надо...
SPI1 подключен к шине APB2, а SPI2 - к APB1.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 24 2016, 06:55
Сообщение #55


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(RadiatoR @ Jun 23 2016, 21:45) *
Извиняюсь, что немного не в тему, но ситуация тоже с SPI. Сегодня выкопал баг:

while(!(SPI2->SR&SPI_SR_RXNE));


Не флуда ради, а токмо просвещения для… какое соотношение между частотой ядра и частотой SCK, что все (ну практически все) в примерах с SPI в тупых циклах ожидают изменения флагов, а не используют \шёпотом\ прерывание?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Jun 24 2016, 07:40
Сообщение #56


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Цитата(RadiatoR @ Jun 23 2016, 20:45) *
Или по крайней мере этот бит очень быстро сбрасывается (не понятно почему)


Разобрался - до сих пор не могу в голову вдолбить, что регистру пофигу кто его читает - mcu или дебаггер. После чтения дебаггером регистра (а он читается автоматически при пошаговой отладке) RXNE сбрасывался и происходило бесконечное ожидание. Дописал timeout на всякий случай.

Цитата(Obam @ Jun 24 2016, 09:55) *
Не флуда ради, а токмо просвещения для… какое соотношение между частотой ядра и частотой SCK, что все (ну практически все) в примерах с SPI в тупых циклах ожидают изменения флагов, а не используют \шёпотом\ прерывание?


48МГц/93кГц.
Все что делает у меня прога это 50раз в сек читает датчик и выкидывает его на CAN шину. Даже заморачиваться не стал с прерываниями.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 24 2016, 07:57
Сообщение #57


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(RadiatoR @ Jun 24 2016, 11:40) *
48МГц/93кГц.


Вопросов больше не имею (;


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Jun 24 2016, 09:20
Сообщение #58


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



наврал. 24/93
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 24 2016, 09:50
Сообщение #59


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(RadiatoR @ Jun 24 2016, 13:20) *
наврал. 24/93

А всё равно. Кстати, если бы реализовывали на прерываниях, то отладчиком флаг не корёжили.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jun 24 2016, 10:13
Сообщение #60


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Я бы провел серию тестов.
Вот такую функцию (сами подставьте правильное выражение для статуса и вашего busy) поставить в разные места прерывания и найти в каком месте флаг меняется. Может каким неожиданным способом флаг читается. Ну там поинтер не туда указывает и т.д.. Когда найдете место, то под лупой рассмотрите его.


Тестировать так:
Поставили в одно место запустили. Если подвисло в ловушке, то убираем отсюда и ставим выше по коду если подвисло в ожидании флага, то ниже.
Код
void trap()
{
    if(your sign that interrupt happen in specific moment)
        if(RXNE != (SPI_STATUS & RXNE))
            while(1)
             {}
}
Go to the top of the page
 
+Quote Post

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

 


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


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