Я пытаюсь читать данные/записывать данные на Xilinx Zedboard (платформа FPGA) с помощью внешнего микроконтроллера через шину I2C. Схема для этого в настоящее время будет выглядеть следующим образом:
Как видно из схемы, микроконтроллер использует подтягивающие резисторы номиналом 1 кОм для шины I2C.
Я заметил, что после первой транзакции микроконтроллер больше не будет читать/записывать данные.
Я не могу отладить это на микроконтроллере, потому что я не могу внести какие-либо изменения в программное обеспечение микроконтроллера. Микроконтроллер был проверен на корректную работу с другими периферийными устройствами I2C.
Когда я смотрю на осциллограмму, я вижу, что Zedboard не переводит линию SDA на логический низкий уровень микроконтроллера при отправке ACKnowledge. Я думаю, что это может быть причиной сбоя транзакции. См. снимок ниже, где видно, что низкий уровень SDA Zedboard примерно на 600 мВ выше низкого уровня SDA микроконтроллера.
Я думаю, что причина этого может быть в том, что подтягивающие резисторы довольно низкие. Однако я не могу внести какие-либо изменения в плату микроконтроллера, а значит, не могу заменить их на более высокие сопротивления.
У вас есть идеи, в чем может быть проблема и как я могу это решить?
Спасибо и привет.
Напряжение, которое вы видите на вашей линии шины, соответствует сопротивлению переключателя на стороне низкого напряжения, превышающему 200 Ом.
Беглый взгляд на схему ZedBoard показывает, что некоторые входные контакты имеют последовательный резистор на 200 Ом, вероятно, для защиты от электростатического разряда. Я предполагаю, что вы использовали такой контакт для связи I2C, но, поскольку вы не сказали нам, как именно вы подключили микроконтроллер к ZedBoard, я не могу сказать наверняка.
Вам придется использовать входной контакт без этого последовательного сопротивления, чтобы получить хороший низкий уровень.
Одним из вариантов может быть использование буфера I2C, чтобы вы могли использовать свои собственные подтяжки на стороне устройства.
Только я
Рой Мейер
Янка
Только я
Гил