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

Как сделать chip select для I2C?

Привет.

Есть 2 девайса, управляемые по I2C. Но товарищи китайцы, "забыли" в них вывести возможность выбора адреса. Соответственно, появилась идея сделать что-то аналогичное CS для SPI. если чип не выбран, то клоки не доходят до чипа, 

Покритикуйте пожалуйста. Все ли правильно?

image.thumb.png.2e535cdec45750c473360f340b61c8b5.png

I2C{SCL,SDA} - это к МК идет. Резисторы подтяжки на питание там есть

MerusChipSeelct - это тоже к МК. 

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


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

Лучше возьмите другой транзистор. У этого большая ёмкость Ciss = 1650 пФ. Возьмите например 2N7002. У него Ciss = 50 пФ.

Чтобы не было выбросов вверх и вниз на шине SCL в моменты переключения ChipSelect (точнее чтобы их уменьшить) добавьте конденсатор на 1000пФ с затвора на землю и последовательный резистор 10кОм от затвора к ChipSelect МК.

Ну и R36 слишком большой. Поставьте 5 - 10 кОм.

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


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

28 минут назад, catBasilio сказал:

Покритикуйте пожалуйста. Все ли правильно?

Думаете он у вас и в инверсном включении пропускать ток будет?  :umnik2:

Имхо - если уж реально нет никаких сигналов выбора на I2C-слэйве (реально  нет?), то лучше поставить специальный чип-коммутатор I2C. Такие имеются готовые. Чем колхоз городить.

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


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

12 minutes ago, Zig said:

Лучше возьмите другой транзистор. У этого большая ёмкость Ciss = 1650 пФ. Возьмите например 2N7002. У него Ciss = 50 пФ.

Чтобы не было выбросов вверх и вниз на шине SCL в моменты переключения ChipSelect (точнее чтобы их уменьшить) добавьте конденсатор на 1000пФ с затвора на землю и последовательный резистор 10кОм от затвора к ChipSelect МК.

Ну и R36 слишком большой. Поставьте 5 - 10 кОм.

есть в наличие Si2302DS он подойдет? вроде у него переходные характеристики лучше

6 minutes ago, jcxz said:

Думаете он у вас и в инверсном включении пропускать ток будет?

не понял вопроса? это же не диод. Почему не должен течь ток Source -> Drain?

Или вы про паразитный диод, который не даст транзистору закрыться?

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


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

2 минуты назад, catBasilio сказал:

есть в наличие Si2302DS он подойдет?

Нет. Максимальная емкость на шине для 100 и 400 кбит/с допускается 400пФ. А у этого 340пФ. Запаса не будет. К тому же у вас будет еще один канал для выключения второй платы.

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


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

18 минут назад, catBasilio сказал:

не понял вопроса? это же не диод. Почему не должен течь ток Source -> Drain?

Я не понял как вы его открывать будете? Очевидно, что подтяжка к +3.3V должна быть с обоих сторон. Значит для открытия нужно на затвор подать напряжение > 3.3V. Где-то на пару вольт выше. Т.е. > 5V. Это значит нужен ещё источник 5V и + ещё один ключ.

Да и будет ли он вообще работать при инверсном приложенном напряжении?

Или как?

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


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

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

Думаете он у вас и в инверсном включении пропускать ток будет?  :umnik2:

Будет.

При 3.3В на затворе и 0В на истоке транзистор откроется и на стоке будет тоже, что на истоке - 0В.

При 3В на затворе и 0В на стоке диод откроется и на истоке будет 0В транзистор откроется и на истоке будет тоже, что на стоке - 0В.

14 минут назад, jcxz сказал:

то лучше поставить специальный чип-коммутатор I2C. Такие имеются готовые. Чем колхоз городить.

С этом согласен. В коммутаторе шин I2C PCA9847 емкость порядка 20пФ. А это коммутатор на 8 выходных шин. Транзисторов с такой маленькой емкостью я не нашел...

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


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

4 минуты назад, Zig сказал:

При 3.3В на затворе и 0В на истоке транзистор откроется и на стоке будет тоже, что на истоке - 0В.

При 3В на затворе и 0В на стоке диод откроется и на истоке будет 0В транзистор откроется и на истоке будет тоже, что на стоке - 0В.

Ясно. Спасибо.

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


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

29 minutes ago, Zig said:

Нет. Максимальная емкость на шине для 100 и 400 кбит/с допускается 400пФ. А у этого 340пФ. Запаса не будет. К тому же у вас будет еще один канал для выключения второй платы.

А можно чуть подробнее про 400pF? откуда это число.

в datasheet есть переходная характеристика:

Turn on time - 25ns

raise time - 60ns

выглядит так, что должно хватить с большим запасом. 

 

для Сiss если считать по времени заряда:

T = R * C = 10000 *  3.4e-10 = 3.4e-06 = 3.4 us - выглядит, что тоже с большим запасом.

Тем более что это чипом не часто нужно управлять. и в MК можно слипов вставить чтобы транзистор упсел открыться.

21 minutes ago, jcxz said:

Я не понял как вы его открывать будете? Очевидно, что подтяжка к +3.3V должна быть с обоих сторон. Значит для открытия нужно на затвор подать напряжение > 3.3V. Где-то на пару вольт выше. Т.е. > 5V. Это значит нужен ещё источник 5V и + ещё один ключ.

Да и будет ли он вообще работать при инверсном приложенном напряжении?

Или как?

вроде должно.

1) на Gate - 3.3v

- source = 0 - транзистор открыт и на drain - 0

- source = 3.3v - транзистор закрыт и на drain - 3.3

2) на Gate - 0

- source = 0  - транзистор закрыт и на drain - 3.3

- source = 3.3 - транзистор закрыт и на drain - 3.3

 

даже паразитный диод тут ничего навредить не сможет

 

Что не так?

21 minutes ago, Zig said:

Будет.

С этом согласен. В коммутаторе шин I2C PCA9847 емкость порядка 20пФ. А это коммутатор на 8 выходных шин. Транзисторов с такой маленькой емкостью я не нашел...

 

Посмотрел на chip-dip-е, этот коммутатор стоит 1000 руб. Ну его нафиг. я лучше мосфетом обойдусь, который уже есть у меня

Изменено пользователем catBasilio

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


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

4 минуты назад, catBasilio сказал:

А можно чуть подробнее про 400pF? откуда это число.

https://www.csd.uoc.gr/~hy428/reading/i2c_spec.pdf

https://www.pololu.com/file/0J435/UM10204.pdf

Смотрите по тексту: 400 pf

 

7 минут назад, catBasilio сказал:

для Сiss если считать по времени заряда:

T = R * C = 10000 *  3.4e-10 = 3.4e-06 - выглядит, что тоже с большим запасом.

Тем более что это чип не часто нужно включать. и в MК можно слипов вставить чтобы транзистор упсел открыться.

Здесь немного другое.

Представьте. На затворе у вас 0В. На истоке OpenDrain с PullUp резистором. Емкость затвор исток заряжается до 3.3В (Ugs).
Далее вы подаете на затвор 3.3В (Ug). На истоке получается 6.6В (Ug + Ugs). МК выходит из строя.

Чтобы этого не было к затвору я предложил подключить емкость на землю во много раз больше емкости затвор-исток. И перезаряжать эту емкость через последовательный резистор, чтобы растянуть во времени этот выброс.

20 минут назад, catBasilio сказал:

Посмотрел на chip-dip-е, этот коммутатор стоит 1000 руб.

Да. Раньше они стоили дешевле.

Но вам можно обойтись двухканальным TCA9543ADR

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


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

1 час назад, catBasilio сказал:

MerusChipSeelct - это тоже к МК. 

Не пойму, если МК может управлять ключом, то почему он не может свой порт перевести в 3-е состояние?

Изменено пользователем stells

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


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

34 minutes ago, Zig said:

Я посмотрел бегло. Там говорится про емкость шины. Как это я понимаю, что если более, то raise и fall time будут не по спецификации, и девайс будет глючить. 

Емкость шины, я понимаю так, 

image.png.fdf1fe14296d0ea845f5c409e8aa20fb.png

я правильно это понял?

 

И тут мне не понятно как Ciss должно на это влиять? оно же по идее на переходный процесс при открытии и закрытии транзистора только влияет?

image.png.cbff27b755e4a029ba8389406ebfd7c3.png

как я понимаю, то Ciss = C50 + C51. то есть нужно чтобы емкость шины была в пределах, то С50 должен быть минимален, так?

по даташиту, что-то этой емкости нет. только Qgc = 0.65 nC каких-то.

 

Изменено пользователем catBasilio

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


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

Промоделируйте в MicroCap.
Ciss= Cgs + Cgd. Причем Cds > Cgd.

В  вашей схеме затвор на питании или земле. Значит почти вся емкость Ciss приложена между SCL и землей.

Когда вы делаете Low на SCL (переводите выход в Low) эта емкость быстро разряжается. Здесь все нормально.

Когда вы делаете High на SCL (переводите выход в OpenDrain) эта емкость медленно заряжается через PullUp резистор. Эта медленность не есть хорошо.
Медленный фронт SCL может быть неправильно воспринят микросхемами. А сократить его можно только уменьшением PullUp резистора. Но маленьким его сделать нельзя, т.к. ограничен втекающий ток микросхем. (Это относится к ACK на SDA и Clock Stretch на SCL)

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


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

58 minutes ago, Zig said:

Здесь немного другое.

Представьте. На затворе у вас 0В. На истоке OpenDrain с PullUp резистором. Емкость затвор исток заряжается до 3.3В (Ugs).
Далее вы подаете на затвор 3.3В (Ug). На истоке получается 6.6В (Ug + Ugs). МК выходит из строя.

Про повышение напряжения - понял. Спасибо!

Только тут в соседней ветке, мне доказывали, что превысить напряжение - это ОК. главное чтобы ток не был высокий, и тогда МК не сгорит 😉

 

21 minutes ago, Zig said:

Промоделируйте в MicroCap.
Ciss= Cgs + Cgd. Причем Cds > Cgd.

В  вашей схеме затвор на питании или земле. Значит почти вся емкость Ciss приложена между SCL и землей.

Когда вы делаете Low на SCL (переводите выход в Low) эта емкость быстро разряжается. Здесь все нормально.

Когда вы делаете High на SCL (переводите выход в OpenDrain) эта емкость медленно заряжается через PullUp резистор. Эта медленность не есть хорошо.
Медленный фронт SCL может быть неправильно воспринят микросхемами. А сократить его можно только уменьшением PullUp резистора. Но маленьким его сделать нельзя, т.к. ограничен втекающий ток микросхем. (Это относится к ACK на SDA и Clock Stretch на SCL)

Вот выделенного - не понял.

image.png

1) выключили клоки на чипе - на Gate подали 0 . Cgd = С51 зарядился, Сgs = C50 - зарядился. (так как там тоже pullup)

2) включили клоки - на Gate подали High.  С51 будет разряжаться. Так ведь? 

2.1) на SCL подаем Low - транзистор открывается. С51 - заряжается. Время нарастания фронта на drain = T = R * C так?

2.2) на SCL подаем High - транзистор закрывается. С51 к этому времени разряжается. время спада тоже T = R * C 

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


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

@Zig, а вот про такую штуку что скажете?

https://www.onsemi.com/pdf/datasheet/bss138-d.pdf

на доллар - ведро отсыпают 😉

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


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

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

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

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

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

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

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

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

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

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