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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> залипает шина I2C в STM32, на МК режим slave
Nixon
сообщение Oct 10 2016, 14:20
Сообщение #31


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Месяц ждать? А на месте купить? Запрос "saleae logic петербург купить" выдает цену ~700 рублей.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Oct 10 2016, 14:56
Сообщение #32


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



сегодня куплю вечером его.
Утром будет у меня уже.

пока давайте еще в осцилл посмотрим.
http://prntscr.com/cs3vat

При нормальной работе идет пачка из 5 пакетов. Адрес моего слейва 0х01

Почему NAK приходит первым пакетом?
Go to the top of the page
 
+Quote Post
gerber
сообщение Oct 10 2016, 14:59
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(Метценгерштейн @ Oct 10 2016, 17:56) *
При нормальной работе идет пачка из 5 пакетов. Адрес моего слейва 0х01

Почему NAK приходит первым пакетом?

Вроде же, ACK там на осциллограмме. 9-й бит защёлкивается ноль, это ACK.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Oct 10 2016, 15:04
Сообщение #34


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



да, правильно. на 9-м бите в нуле зеленый луч. Это АСК.
Вторая пачка всегда в нуле. Тоже нормально?
Go to the top of the page
 
+Quote Post
gerber
сообщение Oct 10 2016, 15:13
Сообщение #35


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(Метценгерштейн @ Oct 10 2016, 18:04) *
да, правильно. на 9-м бите в нуле зеленый луч. Это АСК.
Вторая пачка всегда в нуле. Тоже нормально?

biggrin.gif
Тут уж Вам виднее. Судя по биту направления, идёт чтение, читается нулевой байт, а правильно это или нет, определяется логикой обмена.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Oct 10 2016, 15:13
Сообщение #36


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(gerber @ Oct 10 2016, 17:59) *
Вроде же, ACK там на осциллограмме. 9-й бит защёлкивается ноль, это ACK.

Кстати, не наблюдаете проблем с мастером? Т.е. между фронтами не мало времени? Должен по опыту аппаратный I2C работать?
Go to the top of the page
 
+Quote Post
gerber
сообщение Oct 10 2016, 15:22
Сообщение #37


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Ну, фронты не только мастер определяет, в случае бита ACK/NACK его установка зависит от расторопности слейва, и у вас она на пределе, я бы сказал. Также видно, что мастер меняет SDA практически одновременно с падением вниз SCL, что как раз и может способствовать появлению ложных START/STOP условий, особенно на длинных проводах.
Это как раз то, с чем я боролся, и после чего остановился на софтовом I2C. Неприятная особенность аппаратного I2C в STM32 как раз в этом и заключается, что он очень чувствителен к таким ситуациям, выбрасывает при этом флаг BERR и начинает с начала.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Oct 10 2016, 15:31
Сообщение #38


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



зеленый луч- зачастую слейв отвечает. После SCL слейв дает ответ через микросекунду ровно. Может мастеру быстро?

Разобрал по битам пачку от мастера:
дает адрес 1, далее на чтение.
слейв отвечает 0,7,8,90

а вот мой код:
outgoing[0] = 0x00;
outgoing[1] = 0x07;
outgoing[2] = 8;
outgoing[3] = calcCRC(outgoing, 4);

Все сходится. Вопрос глюков.
Go to the top of the page
 
+Quote Post
Nixon
сообщение Oct 10 2016, 18:35
Сообщение #39


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Мастер растягивать SCL умеет? STM по-умолчанию делает это, возможно мастеру это не подходит.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Oct 10 2016, 18:56
Сообщение #40


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



мастер может и умеет, но я туда не лезу.
Может где в STM указать, чтобы растянул слегка?
Я купил анализатор за 700=, будем завтра изучать вопрос углубленно ))
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 11 2016, 06:46
Сообщение #41


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Метценгерштейн @ Oct 10 2016, 21:56) *
мастер может и умеет, но я туда не лезу.
Может где в STM указать, чтобы растянул слегка?
Я купил анализатор за 700=, будем завтра изучать вопрос углубленно ))

Теперь Вы и сами, думаю, разберетесь. А если покурите UM10204.pdf Philips - такужточно sm.gif

Я для такой разработки, конечно, вместо черного ящика с линуксом сделал бы его эмуляцию для "нагрузочного" тестирования.
(если в процессоре есть 2 канала I2C - то можно эмулятор мастера сделать и в основном проекте, а соединение с линуксом временно разорвать).

Обратите внимание на содержимое вектора обработки прерываний.
Он должен быть полнофункциональный по обработке ситуаций и минимальный по объему кода.
Только работа с периферийным узлом I2C - команды и состояния обмена.


Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Oct 11 2016, 08:09
Сообщение #42


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



http://prntscr.com/cseh7b

вот кусок с анализатора. Не понятно- почему 3 в расшифровке? Адрес 7 бит, 0-й бит =1. Еще младше, это 1- на чтение слейва команда.

Содержимое ветки обработчика может и наполнено лишним. Но надо разобраться сначала тут.
Go to the top of the page
 
+Quote Post
Nixon
сообщение Oct 11 2016, 09:40
Сообщение #43


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Анализатор пишет адрес с учетом сдвига. Там еще на боковой панели вам текстовый лог протокола идет.

По поводу SCL STRETCH - по-умолчанию он включен в STM32. Не каждый мастер поддерживает такую возможность (практически все примеры soft-i2c такого не умеют). Выключите этот режим. NOSTRETCH = 1 в CR1 кажется. Но имейте в виду - в таком случае ваши прерывания по I2C в ведомом не должны иметь длительной обработки.
Хотя если судить по биту ACK кажется ваш мастер такое умеет.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Oct 11 2016, 09:57
Сообщение #44


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



может быть, что зависания происходят из-за того, что в закрытом корпусе? Рядом горячий проц на Линуксе (85 градусов). Корпус изделия на ощупь горячий.
Уже все варианты смотрю.

Только что-то не найти в даташите рабочей температуры МК
Go to the top of the page
 
+Quote Post
Jury093
сообщение Oct 11 2016, 16:12
Сообщение #45


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(Метценгерштейн @ Oct 10 2016, 16:28) *
адрес слейва у меня 0х01.

как минимум, смените адрес слейва на допустимый.. i2cdetect вам в помощь..
Go to the top of the page
 
+Quote Post

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

 


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


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