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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> I2C HAL DS2482, Работа с ds2482 средствами HAL STM
Forger
сообщение Jan 31 2018, 19:30
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 770
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(simark1979 @ Jan 31 2018, 22:23) *
"промышленный онанизм"

Хорошо сказано biggrin.gif
Go to the top of the page
 
+Quote Post
simark1979
сообщение Jan 31 2018, 20:29
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 14-03-09
Из: Краснодарский край
Пользователь №: 46 094



Возвращаясь к теме топика)

Докладываю, что в документации на ds2482 указана неточность, мол после отправки команды сразу нужен Repeated Start, после чего следует читать регистр состояния.
Микросхема нормально работает и со СТОПом мужду посылками





Цитата(0men @ Jan 31 2018, 20:28) *
исправлено: Repeated здесь не будет, но скажите страницу в доке где он так необходим? Строку с Repeated можно разбить на 2 отдельные посылки


https://datasheets.maximintegrated.com/en/ds/DS2482-100.pdf

страница 18, примеры

Сообщение отредактировал simark1979 - Jan 31 2018, 19:53
Go to the top of the page
 
+Quote Post
Lagman
сообщение Feb 1 2018, 07:55
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 838
Регистрация: 28-10-05
Пользователь №: 10 245



Можете посмотреть на реализацию в HAL функций:
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
Не смотрите на их название, они как раз делают такие вещи, выдают адрес устройства и байты откуда считать или записать и потом без стопа происходит считывание или запись, по поводу uint16_t MemAddress если указать в uint16_t MemAddSize = I2C_MEMADD_SIZE_8BIT то он будет 8 битный и будет отправляться один байт.

Если имя функций смущает, напишите для них свои имена. :-)

Если используете DMA или прерывания для работы с I2C то в HALe есть подобные функции и для них.
HAL_I2C_Mem_Write_IT
HAL_I2C_Mem_Read_IT

HAL_I2C_Mem_Write_DMA
HAL_I2C_Mem_Read_DMA
Go to the top of the page
 
+Quote Post
0men
сообщение Feb 1 2018, 11:11
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 7-05-05
Пользователь №: 4 819



Цитата(simark1979 @ Jan 31 2018, 21:41) *
Да, имеется ввиду Repeated START Condition.
Только HAL_I2C_Master_Transmit кроме старта и отправки данных генерит STOP в конце). А он протоколом не предусмотрен


Впрочем, сейчас выясняется, что в документации на ds2482 не указано, что СТОП не мешает. Просто красавцы!


Вот вот ))) на самом деле, много где указано в протоколе, что требуется Repeated START, но на моем опыте всегда работает STOP с новым стартом
Go to the top of the page
 
+Quote Post
simark1979
сообщение Feb 1 2018, 19:01
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 14-03-09
Из: Краснодарский край
Пользователь №: 46 094



Цитата(Lagman @ Feb 1 2018, 10:55) *
Можете посмотреть на реализацию в HAL функций:
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
Не смотрите на их название, они как раз делают такие вещи, выдают адрес устройства и байты откуда считать или записать и потом без стопа происходит считывание или запись, по поводу uint16_t MemAddress если указать в uint16_t MemAddSize = I2C_MEMADD_SIZE_8BIT то он будет 8 битный и будет отправляться один байт.

Если имя функций смущает, напишите для них свои имена. :-)
.............................................................



Спасибо, я про эти функции в курсе.
Но они тоже бы не подошли.
Смысл работы с этой микросхемой иногда сводится к тому, чтобы:
послать команду, а далее постоянно вычитывать и анализировать байт состояния (он будет приходить снова и снова), по которому можно понять выполнилась команда на шине 1wire или нет.
HAL_I2C_Mem_Read_IT заранее должна знать сколько нужно читать.....

Короче немного не то, но всё равно спасибо rolleyes.gif

UPD: извиняюсь, только дошло, что Вы предлагали написать свои функции, подглядывая на реализацию HAL_I2C_Mem_*. Можно было бы и так biggrin.gif
Но проблема снята сама собой, использую стандартные функции HAL_I2C_Master_Transmit и HAL_I2C_Master_Receive. Микросхема их отлично понимает.

Сообщение отредактировал simark1979 - Feb 1 2018, 22:15
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st February 2018 - 22:50
Рейтинг@Mail.ru


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