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

 
 
> STM32F407V I2C в slave тема конечно избитая
Pat
сообщение May 12 2018, 11:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Здравствуйте, Уважаемые Друзья.

Есть I2C МАСТЕР который передает и принимает данные.

У меня реализован I2C подчиненный который принимает и отдает данные.

Мастер ведет себя не совсем корректно по отношению к протоколу I2C.

Он делает запрос чтения к моему устройству примерно так

СТАРТ->АДРЕСС ЗАПИСИ->ДАННЫЕ, а потом при низком SCL переводит SDA в высокий уровень.
Затем снова выдет
СТАРТ->
АДРЕСС ЧТЕНИЕ-> читает данные после чего выдает СТОП.

Я по протоколу могу разобрать когда у меня закончится передача данных от мастера, но
вопрос как это сделать аппаратно по прерыванию.

Вот тут затыка.

В режиме
I2C слайв не работает прерывание SB (было сгенерированно условие СТАРТ).

Есть еще флаг BERR (Bus error) но он не реагирует на что либо после передачи байта.

Может кто сталкивался с подобным.



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Arlleex
сообщение May 12 2018, 21:02
Сообщение #2


Местный
***

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



Цитата
По протоколу после этого мастер должен выдать СТОП и потом начать чтение.

По какому протоколу? По протоколу I2C? Если так, то ничего он не должен. Для этого и существует понятие повторного старта, чтобы лишний раз не останавливать транзакцию. А STM32 прекрасно ловит после повторного старта и передачи физического адреса прерывание по ADDR, вот его и используйте. И времени там в прерывании раздуплиться да понять что произошло - вагон rolleyes.gif Это ж I2C.
Go to the top of the page
 
+Quote Post
Pat
сообщение May 13 2018, 08:41
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(Arlleex @ May 12 2018, 23:02) *
По какому протоколу? По протоколу I2C? Если так, то ничего он не должен.


Хм что то не встречал такого поведения МАСТЕРА на I2C.
Обычно СТАРТ СТОП всегда дублируют друг друга.

Перечитал еще раз описание I2C кое где есть упоминание что может быть повторный СТАРТ.
Ну да ладно пусть будет так, но моя проблема решается только флагом ADDR.

Можно так же извратиться с использованием прерываний по EXTI фиксируя СТАРТ.

Вот интересно почему в контроллере не реализовали прерывание на СТАРТ в slave.
Go to the top of the page
 
+Quote Post



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

 


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


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