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

Создание I2C slave без дополнительного клока

Возможно ли такое в принципе: максимально упрощённый I2C slave, пусть это будет примитивный IO-expander (или даже O-expander для упрощения):  мастер в него только пишет, никогда не читает. Т.о. от слейва потребуется только где надо (9й бит) драйвить SDA выдавая АСК.

В принципе всё защёлкивание адресов, данных внутри слейва можно сделать по SCL, тоже самое с формированием АСК.

Но вот в чём засада - так это то как детектировать START & STOP события?

По классике: семплируются SCL & SDA доп. клоком, выявляется фронт/спад и детектируются START & STOP на основе задержанных на такт доп.клока и не задержанных SCL & SDA.

Может ли в случае отсутствия дополнительного клока помочь какая-нить хитрая схема с защёлками вместо триггеров?

i2c-timing-diagram.thumb.png.a8616d0e58a7e8a9d0d684c3834ccf2a.png

 

 

PS: Теже микросхемы IO-expander'ов работают ведь без дополнительного внешнего клока (конечно может у них внутри RC-осциллятор, но тогда никакого low-power - раз там постоянно ножкой надо трепыхать).

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


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

так то детектор фронта можно и без триггера сделать) на элементах задержки. но, емнп, где то в старых доках от хилых были асинхронные схемы, работающие за счет сигналов clrn/prn. там были детекторы фронта).

ЗЫ. а вообще, если у вас зайлинкс семерка, то там есть встроенный генератор. можно внешний не ставить)

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


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

В 01.06.2023 в 12:57, Doka сказал:

В принципе всё защёлкивание адресов, данных внутри слейва можно сделать по SCL, тоже самое с формированием АСК.

Но вот в чём засада - так это то как детектировать START & STOP события?

Кто мешает защелкивать SCL передним/задним фронтом SDA?:)

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


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

49 minutes ago, des00 said:

если у вас зайлинкс семерка

ASIC

21 minutes ago, _pv said:

О, спасибо, это прям то! 🔥

Еще и особенности расписали:


This code has two drawbacks:

  • The SCL signal is used as a clock in the FPGA/CPLD. The use of a Schmitt trigger on the SCL input pin is strongly recommended to avoid erratic behavior (without Schmitt trigger, any noise or ringing on the SCL line may introduce extra clock cycles, which would break the functionality).
  • The start and stop conditions detection logic uses a combinatorial feedback loop, which is not a recommended practice. Same thing on the "incycle" signal that is used as asynchronous reset by the rest of the logic. These are the price to pay to avoid using an oversampling clock.

If you can live with these drawbacks, you get a very compact I2C slave design.
Otherwise, use an external clock to oversample SDA and SCL (method 2). This way, glitches can be filtered out using digital filters, and the start and stop condition detected easily (at the price of a more complex design).

 

30 minutes ago, Самурай said:

Кто мешает защелкивать SCL передним/задним фронтом SDA?:)

Если этот способ без комбинационной петли, как описано в решении по ссылке выше, то прям интерtсно.

Пока раскуриваю код, который fpga4fun нагородили.

 

PS: Но всёже интересно что там внутри у I2C IO-expander. Тот же NXP ставит внутрь осциллятор или у них там одноклоковая (SCL) логика, но надёжная как K155ЛА3?

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


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

2 hours ago, Самурай said:

Кто мешает защелкивать SCL передним/задним фронтом SDA?:)

Никто не мешает, но это будет точно такая же асинхронная порнография как по ссылке fpga4fun, только на входе этого защёлкивателя, из xor на клоковом входе с выходом триггера, для защёлкивания обоих фронтов. Ровно с теми же проблемами чувствительности к звону на входе.

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


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

В 01.06.2023 в 16:09, _pv сказал:

Никто не мешает, но это будет точно такая же асинхронная порнография как по ссылке fpga4fun, только на входе этого защёлкивателя, из xor на клоковом входе с выходом триггера, для защёлкивания обоих фронтов. Ровно с теми же проблемами чувствительности к звону на входе.

Два триггера защелкивают SCL, первый по заднему фронту SDA, второй по переднему фронту SDA. Получаем два сигнала признака старта/стопа. Оба эти признака с автосбросом (синхронным), если, конечно по SDA не одни нули слать, что как-бы возможно, но очень маловероятно. Можно и асинхронный сброс придумать, дабы не зависеть от данных. Полностью от асинхронщины наверно не избавиться, но явной порнографии вроде нет:)      

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


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

8 hours ago, _pv said:

изобразил схему отсюда, такое себе конечно решение с этими петлями комбинационными:

 

photo_2023-06-01_21-47-00.thumb.jpg.438d4094f33f383e6aa521bc15160625.jpg

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


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

8 hours ago, Doka said:

изобразил схему отсюда, такое себе конечно решение с этими петлями комбинационными

У вас же асик, по идее это не должно быть проблемой) а вообще, напишите SM, не поверю что он асике ни разу не делал и2ц) 

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


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

Совршенно неожиданно после долгих поисков наткнулся на это: Robust I2C slave without a sampling clock

https://dlbeer.co.nz/articles/i2c.html

А там прям подробное развитие идеи, предложенной Самурай:

 

995183693_Screenshotfrom2023-06-0214-16-39.png.883328bf30c39a63e2354b7f370e281f.png

1193768852_Screenshotfrom2023-06-0214-16-44.png.288556b586e5b7a838ef28ddb1d7f4f4.png

 

8 hours ago, des00 said:

У вас же асик, по идее это не должно быть проблемой) а вообще, напишите SM, не поверю что он асике ни разу не делал и2ц) 

да что-то наш гуру комбинационных петель и прочих асик-кульбитов давно не появлялся тут.. уж не сменил ли сферу интересов?

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


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

1 hour ago, Doka said:

да что-то наш гуру комбинационных петель и прочих асик-кульбитов давно не появлялся тут.. уж не сменил ли сферу интересов?

в плисах да, а на форуме он вроде недавно был)

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


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

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

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

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

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

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

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

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

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

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