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

i2c через FPGA (конкретно через GoWin GW1N*)

2 часа назад, iiv сказал:

нет

тоже нет. Если бы было бы, я бы попользовал.

печалька...

Если бы не выбранный вами ESP32, то можно было бы посоветовать ногодрыжную реализацию I2C, в которой на все ведомые подать общий SCL, а SDA - выделить каждому свой. И опрашивать тогда можно все (одинаковые) одновременно - одной транзакцией.

Но как я понимаю - на ESP32 с количеством ног вообще проблема.  :sad:

2 часа назад, iiv сказал:

Вопрос, скажите, пожалуйста, правильно ли я понимаю, что если я их на две группы разобью, и esp32-s3 и OV05640-A71A будут как будут, но на 3.0В, а вот ICP-10101 через подтяжки на 1.8В, то можно не мудрить с этими уровнями?

Т.е. - на две разные шины I2C?

А почему не будет? Должен. Если конечно у ESP32 нет каких-то странностей в I2C....

24 минуты назад, _pv сказал:

конечно, питание дёргать, но если не очень быстро и часто, возможно прокатит.

ТС как я понимаю хочет по текущему давлению определять высоту полёта дрона. Так что - не прокатит. Разве что для медленно взлетающего дирижабля. 🎈:wink:

24 минуты назад, _pv сказал:

У 5640 адрес поменять вроде можно в регистре (SCCB_ID помечен как RW), и если все эти 5 штук при включении питания включать не сразу, (возможно ещё одним TCA6408A отпускать ресеты по очереди), адреса можно раздать индивидуальные.

По количеству ног нет никакого выигрыша с вариантом индивидуального SDA для каждого ведомого. Даже проигрыш. Но при индивидуальном SDA и опрашивать можно одновременно. Правда - ногодрыжным I2C. Но тут весь вопрос в требуемой частоте опроса. Датчики давления вроде как и не нужно опрашивать несколько тысяч раз в секунду (если конечно не гиперзвуковую ракету проектируем :wink: ). А значит ногодрыг - вполне себе вариант.

Скажем - при частоте SCL до пары кГц, не проблема на МК уровня среднего Cortex-M сделать ногодрыжный I2C на прерываниях таймера. Загрузка МК будет никакая.

20 часов назад, makc сказал:

А что делать с клок-стретчингом и т.п.?

По моему опыту - далеко не все I2C-ведомые его используют. Можно протестить свои и (если не используют) - сильно упростить себе жизнь.

Хотя конечно метод несколько костыльный.

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


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

7 minutes ago, jcxz said:

По количеству ног нет никакого выигрыша с вариантом индивидуального SDA для каждого ведомого. Даже проигрыш.

i2c io expander для дергания ресетов на этой же единственной шине сидит и дополнительных ног не требует.

да и камеру по i2c опрашивать вроде особо не надо, особенно омнивижены эти, так, один раз сконфигурировать на старте.

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


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

27 minutes ago, jcxz said:

Правда - ногодрыжным I2C. Но тут весь вопрос в требуемой частоте опроса. Датчики давления вроде как и не нужно опрашивать несколько тысяч раз в секунду (если конечно не гиперзвуковую ракету проектируем :wink: ). А значит ногодрыг - вполне себе вариант.

все датчики надо уметь быстро дергать. Конечно не гиперзвук, и скорости никакие (до 10м/с), но этот датчик видит разницу 1м/с ветра, поэтому по нему очень хорошо срыв потока с крыла стабилизатора дрона детектировать, особенно если по сотне раз в секунду опрашивать. Я как раз про параллельный ногодрыг уже думал, если скорости последовательного опроса не будет хватать.

С камерой тоже не все так просто и, как я понимаю, i2c тоже часто (разы в секунду) дергать придется, так как у этой камеры можно поставить 120fps на маленькое окно 320х240, но это окно будет по всему полю пикселей передвигаться. Конечно не факт, что у меня до этого руки дойдут, но опцию быстрого изменения регистров в разных камерах хотелось бы иметь.

46 minutes ago, _pv said:

1.9В конечно больше чем половина от 3В, но к сожалению меньше чем 0.75 от 3 и тем более 3.3В. в даташит на esp загляните, что именно он за Vih считатет.

Спасибо! Да, проморгал я, что esp32 гарантированно переключается на ноль до 0.25*VDD и на единицу от 0.75*VDD.

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


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

А если вот так: перевести МК на 3.0В, все камеры в параллель (общий scl, разные sda) - будет 6 пинов,

а в барометрах сделать так:

gnd - 6КОм - v1 - 1КОм - v2 - 3КОм - 3.0В

где v1 - ноги на сенсорах, а v2 - ноги на МК.

Вроде и 0.25-0.75 для МК получаются, и на сенсоре не больше 1.8В.

Тогда все на МК и на нем только 12 ног задействовано будет, и в плиске танцев с бубном не будет что меня полностью будет устраивать Я вчера, когда тему открыл, еще думал, что в плиске есть что-то аналогичное txb10x.

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


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

42 минуты назад, iiv сказал:

все датчики надо уметь быстро дергать. Конечно не гиперзвук, и скорости никакие (до 10м/с), но этот датчик видит разницу 1м/с ветра, поэтому по нему очень хорошо срыв потока с крыла стабилизатора дрона детектировать, особенно если по сотне раз в секунду опрашивать. Я как раз про параллельный ногодрыг уже думал, если скорости последовательного опроса не будет хватать.

Глянул даташит ICP-10101 по диагонали... Если грубо прикинуть:  1/(132*2/40e3 + 5.6e-3) = 82Гц - примерная достижимая частота опроса при ногодрыжном I2C в таймерном ISR=40кГц; где - 132 - примерная длина посылки(бит), два прерывания на бит; 5.6мсек - длительность преобразования в "Normal mode". Если опрашивать все в-параллель.

Возможно что-то можно сократить и повысить частоту опроса. Например - подобрать задержку после старта преобразования и сократить биты 29...39. Или давать NACK в 103-м или даже в 85-м бите (если температура не нужна).

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


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

камерам RC цепочки на ресет на 0, 1, 2, 4, 8 мс, чтобы включались по очереди. После дергания ресетом начинать непрерывно писать по адресу сенсора в регистр sccb_id какой-нибудь другой адрес, например 0хА0, как ack в ответ придёт, начинать писать 0xA1, ... и так всем камерам индивидуальные адреса назначить.

а потом можно совсем упороться и датчики давления повесить камерам на их gpio (там пара есть вроде), и сделать i2c ногодрыгом через i2c. Тогда ничего кроме единственного i2c от МК не надо.

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


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

В 03.11.2024 в 15:04, iiv сказал:

имеется МК (на 3.3В) с I2C (SCL, SDA), который мне надо подключить к 5 различным сенсорам с одинаковым адресом, чтобы с ними общаться через I2C

Возможно вам нужен I2C Bus Multiplexer. Их много кто выпускает. Например на 8 шин у NXP. Еще есть у TI.

Они могут работать с разными напряжениями на шинах.

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


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

4 hours ago, iiv said:

в плиске танцев с бубном не будет

inout sda_master;
inout scl_slave;

input [2:0] Pos;

inout sda_slave[0:4]; // LSB / MSB - better to change endianess i.e. [4:0]
inout scl_slave[0:4];

Не понимаю, какие бубны? Допустим, клок слэйвы тормозить не умеют (ну иначе так же как SDA)

inout в плис  -> out, oe (0-ena, 1-HiZ), in

reg [4:0] sel;

always_comb begin

sel=`1;

sel=sel^(1<<pos);

sda_slave_oe={5{sda_master_in}}|sel;

scl_slave_oe={5{scl_master_in}}|sel;

sda_master_oe=&sda_slave_in;

scl_master_oe=1; // only FPGA input, i2c slaves do not drive scl*

{sda_slave_out, scl_slave_out, sda_master_out, scl_master_out}='0;

end

upd: sda_master_oe=&(sda_slave_in|sel); // так наверно надежнее будет, на случай если какойто слэйв заглючит

наверно, я плохо подумал... сам так не делал.

но ведь техасовские то ли TBA, то ли TBX буфера для согласования I2C-шных шин с разными питаниями приблизительно так устроены... - посмотрю их на досуге.

 

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


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

В 03.11.2024 в 19:34, Arlleex сказал:

Вот именно поэтому...

По вашему опыту, что лучше взять вместо TXS.. для согласования уровней i2c?

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


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

22 минуты назад, kuzkin сказал:

По вашему опыту, что лучше взять вместо TXS.. для согласования уровней i2c?

Да любой специализированный для этих целей [censored], у TI, NXP (да кого угодно) такие есть. Я применял I2C-коммутаторы, они на всех сторонах (насколько помню) сразу с нужными уровнями были (каким подтянешь, такое и будет).

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


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

Еще немного не по теме, но тоже может оказаться полезным.

Есть микросхема LTC4316, преобразующая I2C адреса всех слэйвов, подключенных к ее выходу. Преобразование задается резисторами.
С помощью ее можно к I2C мастеру подключить множество слэйвов с одинаковыми адресами. И она тоже может преобразовывать уровни.

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


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

А почему не сделать 5 мастеров (или сколько вам надо) к ним подключить датчики.

Эти мастера опрашивают датчики и данные с датчиков пишут в память/регистры плис(CPLD), а уже к этой памяти/регистрам подключить i2c с мк?
Делал такое решение на CPLD нормально работало.

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


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

On 11/5/2024 at 8:12 AM, kuzkin said:

По вашему опыту, что лучше взять вместо TXS.. для согласования уровней i2c?

и на ксайлинских демо бордах и потом у себя использовал TI

TCA/PCA - там разное число каналов 2-8 . но там надо команду на переключение шин давать. 

https://www.ti.com/interface/i2c/switches-and-multiplexers/overview.html

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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