На акселерометре MMA7455 есть только один контакт DATA, который используется как для ввода, так и для вывода. В мануале мне сказано подключить этот контакт к SDI и SDO. Теперь все хорошо, но на моем чипе это два отдельных вывода.
Если я подключу выводы SDI и SDO к выводу DATA, не будут ли данные, выходящие из SDO, также поступать на вывод SDI? Не вызовет ли это никаких проблем?
Есть ли какая-либо буферизация, которая потенциально могла бы хранить данные, поступающие через SDI? (Так что, возможно, после отправки чего-то из SDO я могу очистить буфер в SDI, чтобы не читать то, что я только что отправил).
Судя по картинке, у вас есть плата/модуль для MMA7455 от Parallex? Сама микросхема позволяет использовать как 4-проводной, так и 3-проводной SPI, но этот модуль имеет только 3-проводной режим.
Но это не проблема. Суть 3-х проводного режима в том, что он полудуплексный, передаёт только в одну сторону за раз. И это устройство является ведомым устройством, оно не отправляет произвольные данные все время. Подключив sdi и sdo к одному и тому же контакту, вы просто освободите контакт sdo (режим tristate/input), когда вы ожидаете чтения данных. Вы управляете часами, поэтому вы контролируете, когда и как быстро акселерометр отправляет данные. Вы устанавливаете вывод cs, отправляете адрес регистра с битом чтения, затем, прежде чем начать синхронизацию данных, вы освобождаете вывод SDO. Вы очищаете свой буфер, затем синхронизируете данные. Если вы не готовы, не ставьте галочку на spi-часах.
Что вы хотите/нужно сделать, так это взглянуть на техническое описание чипа, а не только на техническое описание модуля.
С таким чипом нет большого преимущества в использовании встроенной периферии SPI микроконтроллера. Просто подключите акселерометр к некоторым контактам ввода-вывода общего назначения и напишите программное обеспечение для создания сигналов, показанных на временной диаграмме таблицы данных. Взрывной стиль!
Или используйте вместо этого режим I2C.
суперкот