Например TDA7294

Форум РадиоКот • Просмотр темы - I2C, HAL. Как считать данные из slave-устройства?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс июл 27, 2025 10:12:21

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: I2C, HAL. Как считать данные из slave-устройства?
СообщениеДобавлено: Ср авг 23, 2017 16:52:22 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 10
Зарегистрирован: Пт фев 16, 2007 14:18:20
Сообщений: 1132
Откуда: Новосибирск
Рейтинг сообщения: 0
Всем привет!
Столкнулся с акселерометром FXOS8700. Управляется по I2C. Адрес устройства 0х1E. Контроллер STM32L476.
Проблема с чтением регистра WHOAMI. (ID устройства). Точнее, в целом проблема чтения данных с устройства. Набросал функцию.
В качестве аргумента передаю адрес регистра который намерен считать.
Код:
uint8_t FXOS8700_ReadByte (uint8_t ui8reg)
{
   uint8_t ui8byteFromReg;
   HAL_I2C_Master_Transmit (&hi2c3, (0x1E<<1), &ui8reg, 1, 200);
   HAL_I2C_Master_Receive (&hi2c3, ((0x1E<<1)|0x01), &ui8byteFromReg,1, 200);
   return ui8byteFromReg;
}


Как я понял (до этого делов с I2C не имел), для чтения должны придерживаться диаграммы single byte read.
вот вырезка из доки.
Изображение
Вот тут непонятки. Адрес имеет длину 7 бит. Я так понял, просто так мы его передать не можем? Надо его сдвинуть влево на бит и тогда подсунуть в функцию HAL_I2C_Master_Transmit . Сначала мы передаем устройству адрес+W, получаем от устройсва AK, затем передаем адрес регистра который будем читать (в нашем случае это 0х0D). После этого опять ожидаем AK. За эту часть отвечает HAL_I2C_Master_Transmit.
Затем, (не понял как сгенерить SR) отсылаем адрес + R И после этого ожидаем AK и содержимое регистра 0х0D устройства. Но вот что-то на этом этапе линия данных ложится в нуль, хотя ID != 0. Вот сфотал (по другому не получается) экран с данным от лог. анализатора. При таком подходе, в конце работы ф-ции transmit передается STOP.
Работа функции transmit
Изображение
Receive
Изображение
Правильно ли я понял принцип обмена данными с устройством, которое сидит на I2C шине и в чем ошибка?

_________________
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y