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

 
 
> 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 13 2018, 09:06
Сообщение #2


Местный
***

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



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

А Вы посмотрите описание любой микросхемы I2C EEPROM-памяти, там практически в 100% случаев чтение с повторным стартом.

Цитата
Вот интересно почему в контроллере не реализовали прерывание на СТАРТ в slave.

Да ровно по той же причине, по которой весь модуль I2C в STM32 - сплошной костыль. Потому что криворукие инженеры там сидят, вот почему.
Написать полноценный хороший контроллер I2C Master или Slave на STM32 можно, даже со всеми обработками ошибок и т.д., и DMA прикрутить, но это все выйдет в денек-другой сплошного копания Reference Manual, что не всегда позволительно.

Цитата
Ну да ладно пусть будет так, но моя проблема решается только флагом ADDR.

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

Я вот реально не понимаю, в чем Ваше недоверие, если это можно так назвать, к прерыванию по ADDR? biggrin.gif
Зачем извращаться с EXTI, огребая от него еще кучу лишнего геммороя набора особенностей, если по SCL/SDA пронесется лишний clock...
Go to the top of the page
 
+Quote Post



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

 


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


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