Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

STM32F303 + гироскоп WT901 , не читает с нужного регистра

Пт сен 27, 2019 20:55:56

Пытаюсь подружить STM32F303 и WT901 по I2C шине.
Не хотит читать с нужного регистра.
Читает не известно с какого адреса , но что бы добраться до нужных мне данных, надо прочитать больше 150 байт.
код
Спойлерvoid GYRO_READ_I2C2(uint8_t HardSlaveAddr, uint16_t ExtSlaveAddress,uint8_t NumBytes, uint8_t *buf)
{
int DataNum = 0;
I2C2->CR2 = (1<<16) | (HardSlaveAddr<<1);
while (!(I2C2->ISR & I2C_ISR_TXE) );
I2C2->TXDR = ExtSlaveAddress;
I2C2->CR2 |= I2C_CR2_START;
while (!(I2C2->ISR & I2C_ISR_TC) ){};
I2C2->CR2 = I2C_CR2_AUTOEND | (NumBytes<<16) |
(HardSlaveAddr<<1) |
I2C_CR2_RD_WRN |
I2C_CR2_NACK;
I2C2->CR2 |= I2C_CR2_START;
while(DataNum != NumBytes)
{
while(LL_I2C_IsActiveFlag_RXNE(I2C2) == RESET){};
buf[DataNum] = LL_I2C_ReceiveData8(I2C2);
DataNum++;
}
while(LL_I2C_IsActiveFlag_STOP(I2C2) == RESET){};
LL_I2C_ClearFlag_STOP(I2C2);
}


Вызов GYRO_READ_I2C2 (0x50,0x3D,6,rd_value); //Адрес гироскопа, адрес регистра,количество байт


Картинка с анализатора
Изображение
В анализаторе стоит 8бит.
Делал для того что бы сравнить с картинкой из даташита.
Вот она.
Изображение
Не могу понять что не хватает.
Гироскоп отзывается, и передает свои данные, но не берет номер регистра, откуда читать.
Вот даташит на гироскоп, нужное на 47 странице документа
1.PDF
(2.69 MiB) Скачиваний: 284

Может кто что подскажет ?
СТМ занялся не давно многое еще не понятно.
И на F3 мало примеров.
А на этот гироскоп, все примеры для уарта, для I2C не нашел.
screenshot.png
(10.13 KiB) Скачиваний: 306

Re: STM32F303 + гироскоп WT901 , не читает с нужного регист

Пт сен 27, 2019 21:18:30

Не могу понять что не хватает.
Гироскоп отзывается, и передает свои данные, но не берет номер регистра, откуда читать.
На Ваших осциллограммах видно, что из фазы записи в фазу чтения Вы переходите выполняя на шине СТОП, затем СТАРТ.
На картинках из даташита (хоть там очень мелко и трудно разобрать), но судя по всему переход там выполняется выполнением на шине ПОВТОРНОГО СТАРТА (или ещё это называют - РЕСТАРТ).
Разные I2C-чипы немного по-разному отрабатывают такие переходы. Некоторым всё равно: и СТОП-СТАРТ-ом переходят в чтение, и ПОВТОРНЫМ СТАРТОМ. Но другие чипы требуют совершенно конкретной операции (или СТОП-СТАРТ или ПОВТОРНЫЙ СТАРТ). Которая обычно явно указывается в даташите. В этом даташите вроде не находится явного указания, но на картинке показан похоже ПОВТОРНЫЙ СТАРТ. Попробуйте выполнить его.

Re: STM32F303 + гироскоп WT901 , не читает с нужного регист

Пт сен 27, 2019 22:22:58

Вроде и через релоад пробовал, не заводилось совсем, повисал при отправке адреса на чтение.
Попробую еще раз помучать.
Так вроде покрупнее.
Изменение размера 11.jpg
(74.09 KiB) Скачиваний: 292

Re: STM32F303 + гироскоп WT901 , не читает с нужного регист

Вс сен 29, 2019 20:19:44

Спасибо за пинок в нужную сторону.
Я чет рестарт с релоадом попутал, поэтому и не получалось
Изменил строку в такой вид
I2C2->CR2 = I2C_CR2_AUTOEND | (NumBytes<<16) |
(HardSlaveAddr<<1) | I2C_CR2_START |
I2C_CR2_RD_WRN |
I2C_CR2_NACK;
И все заработало как надо.
Ответить