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

UART и I2C на одной физической линии

Хочется странного. Посадить на одну линию (два провода и GND) два датчика с разными интерфейсами, датчик с UART (MH-Z19) и датчик с I2C (SHT21).

Один провод - TX, SCL, другой - RX, SDA. Конечно работа с интерфейсами - поочереди, не одновременно. Подскажите, будет ли работать такая конструкция?

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


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

12 minutes ago, turnon said:

Подскажите, будет ли работать такая конструкция?

Теоретически, информация, передаваемая по UART может совпасть с условием START + SLAVE_ADDR вашего второго датчика. И тот честно подтвердит своё наличие на шине, т.е. выдаст состояние ACK, прижав SDA к земле. Я не думаю, что такая комбинация сигналов понравится первому датчику. Ну, или, наоборот - что-то, передаваемое по I2C совпаст по формату для первого датчика. Тот, в свою очередь, начнёт отвечать. Будет коллизия на шине. А у вас линий не хватает от МК (ПЛИС)? Или всё это наружу прибора выходит?

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


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

2 minutes ago, turnon said:

Да, линий не хватает.

Поставьте расширитель, типа PCA9534. Её подключаете к МК (ПЛИС) по I2C. А через неё программно придётся сделать UART. Заодно вообще в систему добавите 8 GPIO двунаправленных.

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


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

36 minutes ago, turnon said:

Один провод - TX, SCL, другой - RX, SDA. Конечно работа с интерфейсами - поочереди, не одновременно. Подскажите, будет ли работать такая конструкция?

Изврат, конечно, но можно попользовать SDA для USART в "симплексе", если TxRx  USART посоединять на стороне датчика и "мастера".

Анекдот про "варить яйца", "кому это нужно и кто это выдержит" ?

 

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


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

4 minutes ago, k155la3 said:

Изврат, конечно, но можно попользовать SDA для USART в "симплексе", если TxRx  USART посоединять на стороне датчика и "мастера".

Анекдот про "варить яйца", "кому это нужно и кто это выдержит" ?

 

Тут не понял, подробнее пожалуйста, что и куда подсоединить.

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


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

33 минуты назад, k155la3 сказал:

Изврат, конечно, но можно попользовать SDA для USART в "симплексе", если TxRx  USART посоединять на стороне датчика и "мастера".

...и получить к.з. на линии, когда во время работы I2C туда решит вклиниться UART?

 

PS: Если экономить пины, то имхо нужно искать другие варианты. Не 2 же линии всего в МК у ТС-а...

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


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

36 minutes ago, turnon said:

Тут не понял, подробнее пожалуйста, что и куда подсоединить.

Шина I2C работает по схеме "открытый коллектор", те допустима работа нескольких "передатчиков" на одной линии, даже одновременно активным уровнем (это 0). 

image.png.4d96e59faf8fa26ab5deda988a128b9a.png

контроллер-то конечно "все стерпит", но допустит ли работу в таком режиме сенсор. 

8 minutes ago, jcxz said:

...и получить к.з. на линии, когда во время работы I2C туда решит вклиниться UART?

PS: Если экономить пины, то имхо нужно искать другие варианты. Не 2 же линии всего в МК у ТС-а...

именно поэтому и "изворот". Это уже проблема контроллера и софта, чтобы не случилось такого. Ради экономии пары проводков.

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


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

11 минут назад, k155la3 сказал:

именно поэтому и "изворот". Это уже проблема контроллера и софта, чтобы не случилось такого. Ради экономии пары проводков.

Можно конечно сделать UART.TX с OK. Но вангую, что в мануале на MH-Z19 наверняка ничего нет про его поведение в случае если ему на UART.RX поступает какой-то мусор. А значит он может и серануть чего-то произвольное в этот момент на UART.TX. И испортит посылку на I2C.SDA. И об этом может никто не узнать, только данные полученные от SHT21 окажутся неверными. И как ни извращайся с софтом контроллера - ничего здесь не сделаешь.

 

PS: А вот когда автор уволится с этой работы и оставит такой колхоз наследнику, то матов от него вдогонку получит немеряно.  :negative:

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


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

5 minutes ago, jcxz said:

Можно конечно сделать UART.TX с OK. Но вангую, что в мануале на MH-Z19 наверняка ничего нет про его поведение в случае если ему на UART.RX поступает какой-то мусор. А значит он может и серануть чего-то произвольное в этот момент на UART.TX. И испортит посылку на I2C.SDA. И об этом может никто не узнать, только данные полученные от SHT21 окажутся неверными. И как ни извращайся с софтом контроллера - ничего здесь не сделаешь.

 

PS: А вот когда автор уволится с этой работы и оставит такой колхоз наследнику, то матов от него вдогонку получит немеряно.  :negative:

Согласен, видимо чуда не будет. Надо найти один пин МК и поставить ключ для подачи питания на датчик I2C.

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


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

Только что, turnon сказал:

Согласен, видимо чуда не будет. Надо найти один пин МК и поставить ключ для подачи питания на датчик I2C.

Вы покажите какие ещё есть пины в вашем МК и на что задействованы. Или схему. Может кто что и посоветует по совмещению функций пинов.

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


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

1 minute ago, turnon said:

Надо найти один пин МК и поставить ключ для подачи питания на датчик I2C.

А вы уверены, что незапитанный датчик не создаст никаких уровней на шине? Разделите же эти линии физически.

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


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

18 minutes ago, haker_fox said:

А вы уверены, что незапитанный датчик не создаст никаких уровней на шине? Разделите же эти линии физически.

Да, об этом не подумал. Хотя как он может что-то создать, он же не среагирует на стартовое уловие? Или может произойти паразитная запитка и заработает и без VCC.

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


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

MH-Z19 размером с чемодан, экономить место и выводы на фоне которого в общем случае странно.

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


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

38 минут назад, turnon сказал:

Хотя как он может что-то создать, он же не среагирует на стартовое уловие?

А вы посмотрите, какое у него допустимое напряжение на этих выводах. Наверняка верхний порог привязан к напряжению питания, т.е. что-то вроде Vcc+0.3 v.

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


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

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

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

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

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

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

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

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

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

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