Перейти к содержанию
    

I2C не могу разобраться в работе.

Здравствуйте все.

Есть задача по вводу/выводу данных через микросхему расширений PCA9555 с интерфейсом I2C. Не могу считать данные. Пошагово считывает, а при запуске затыкается..

uint8_t I2CRead(uint8_t addres, uint8_t comand, uint8_t *data1, uint8_t *data2)
{

	  I2C1->CR1 |= I2C_CR1_START;
	  while (!LL_I2C_IsActiveFlag_MSL(I2C1));

	  (void)I2C1->SR1;

	  I2C1->DR = addres;
	  while (!(I2C1->SR1 & I2C_SR1_ADDR));

	  (void)I2C1->SR1;
	  (void)I2C1->SR2;

	   LL_I2C_TransmitData8(I2C1, comand);
	  while (!LL_I2C_IsActiveFlag_BTF(I2C1));

	  I2C1->CR1 |= I2C_CR1_START;
	  while (!LL_I2C_IsActiveFlag_MSL(I2C1));
//	  (void)I2C1->SR1;

	  I2C1->DR = addres+1;
	  while (!(I2C1->SR1 & I2C_SR1_ADDR));  ВОТ ЗДЕСЬ ЗАТЫКАЕТСЯ. ПОШАГОВО ЗДЕСЬ БИТ ADDR УСТАНАВЛИВАЕТСЯ. И ФЛАГИ BTF

	  (void)I2C1->SR1;
	  (void)I2C1->SR2;


		// ожидаем окончания приема данных
		while (!(I2C1->SR1 & I2C_SR1_RXNE))
		{
		}
		// cчитываем приянтое значение
		*data1 = I2C1->DR;

		// ожидаем окончания приема данных
		while (!(I2C1->SR1 & I2C_SR1_RXNE))
		{
		}
		// cчитываем приянтое значение
		*data2 = I2C1->DR;

	  LL_I2C_GenerateStopCondition(I2C1);
	//  LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_NACK);

	  return I2C_OK;
}

В этой функции с начало  пишу команду(считывание) потом посылаю адрес с битом чтения и все, затык. А пошагово проходит и считывает. Правда пошагово я проверяю флаг BTF, иначе не успевает проверить ADDR. Микросхема сконфигурирована на вход. В чем может быть дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что еще интересно. Щупом осциллографа если смотрю SCL, то совсем не работает. Такое впечатление, что влияет емкость щупа. Проскакивает 1 импульс и все. Подтяжка 4.7к

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, резисторы к 5в. подтягивать можно?. Вроде ничего крименального.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если речь о выводах PB6-PB11 то да, их можно подтягивать к +5 (в даташите они помечены как FT = 5 V tolerant).  В какой режим настроены ножки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Короче. Поменял контроллер и стало все норм. Он мне сразу не понравился. Не помню на чем, он подозрительно себя вел)).

Я даже осциллографом не смог тактовые импульсы посмотреть (I2C), а сейчас норм

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может вы ему ногу питания не припаяли, от которой этот порт питается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Первым делом я все просмотрел и пропаял. Я сначало думал, что они  в воздухе висят, SCL. 2 раза их пропаял

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...