Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

3 провода SPI

Тема в разделе "MicroPython", создана пользователем evgeny2k, 10 авг 2016.

Метки:
  1. evgeny2k

    evgeny2k Новичок

    Сообщения:
    18
    Симпатии:
    3
    День добрый всем! Пытаюсь стыковать NodeMCU (прошивка MicroPython v1.8.2-84) и оптический сенсор ADNS-5020-en. Эта связка упорно не хочет работать. Пробовал назначать один пин для miso и mosi (spi = SPI( baudrate=115200, polarity=1, phase=1, sck=Pin(4), mosi=Pin(5), miso=Pin(5)). При чтении регистра всегда получаю в ответе b'\xff' . При переключении режима пина в зависимости от типа операции (Pin(5, Pin.IN) на чтение и Pin(5, Pin.OUT) на запись), картина не меняется.
    Второй вариант подключения - используются разные пины для mosi и miso, но они соединены перемычкой. В результате получаю в ответ на запрос адрес запрашиваемого регистра. Все операции разделены переключением NCS согласно даташиту. Перепробовал наверное уже всё, что возможно. По сему прошу помощи у знающих людей. Как завести 3-проводный SPI?
     
  2. evgeny2k

    evgeny2k Новичок

    Сообщения:
    18
    Симпатии:
    3
    Т.е. GPIO12 и GPIO13 были замкнуты между собой? И если CS не использовал, то как выбирал чип? В моем случае CS используется и для разграничения операций (прописано в даташите ADNS-5020-en). Он же функционально и как RESET. И опять же, если без CS, а пины MISO и MOSI замкнуты, то имеем уже не 3-х, а 2-х проводное соединение :)
    Сегодня пытался подключить акселерометр по 3-х проводной схеме. Те же грабли один в один.
     
  3. evgeny2k

    evgeny2k Новичок

    Сообщения:
    18
    Симпатии:
    3
    Вот именно так и получается. MOSI и MISO сидят на одной линии. Поэтому и имеем 3 линии:
    1- MOSI+MISO
    2- CS
    3- SCLK
    Вот ссылочка на статью. Тут описано подключение моего сенсора к ардуино. Обратите внимание на табличку Connections и надпись под ней:"On the Arduino, MISO and MOSI are tied together".
    Теперь касательно CS. Ниже цитаты из даташита:
    Из даташита (раскрыть)

    Chip Select Operation
    The serial port is activated after NCS goes low. If NCS
    is raised during a transaction, the entire transaction
    is aborted and the serial port will be reset. This is true
    for all transactions. After a transaction is aborted, the
    normal address-to-data or transaction-to-transaction
    delay is still required before beginning the next trans-
    action. To improve communication reliability, all serial
    transactions should be framed by NCS
    ...

    В коде ардуино так и сделано. Каждая операция начинается с переключения состояния CS и заканчивается им же.
     
  4. evgeny2k

    evgeny2k Новичок

    Сообщения:
    18
    Симпатии:
    3
    Ну что же Вы мне пытаетесь рассказать как SPI работает по 4 проводам? Мой вопрос касается 3-х проводного варианта, когда MOSI и MISO сидят на одной линии. И задан вопрос тем людям, кто конкретно имеет опыт работы с таким подключением на ESP8266 с micropython на борту. Похоже придётся ковырять исходники микропитона и смотреть, как там реализована работа SPI. В коде для ардуино (ссылка в моём посте выше) есть вот такой интересный момент: pinMode(MOSI, INPUT) и pinMode(MOSI, OUTPUT):
    Код (Text):
    1.  
    2. unsigned int ADNS_read(unsigned int address){
    3.   unsigned int data;
    4.   digitalWrite(nCS,LOW);
    5.   SPI.transfer(address);
    6.   pinMode(MOSI, INPUT);
    7.   data = SPI.transfer(0x00);
    8.   pinMode(MOSI, OUTPUT);
    9.   digitalWrite(nCS,HIGH);
    10.   return(data);
    11. }
    12.  
    То же самое я сделал и на питоне. В моём первом посте это описано. Но не работает! Вот я и пытаюсь выяснить, кто же виноват, кривая программная реализация модуля работы с SPI в Python или что-то еще не так (у меня руки кривые?). Ежели есть люди, которые смогли что-то запустить на Python с 3-х проводным вариантом подключения SPI, значит с модулем SPI в micropython всё хорошо и вероятно это я что-то где-то не так делаю. И значит люди поправят меня. Другой вариант, если скажут, что тоже мучались, но не взлетело. Значит прямая дорожка в питонячьи исходники. Вот и всё, что мне нужно.
     
  5. evgeny2k

    evgeny2k Новичок

    Сообщения:
    18
    Симпатии:
    3
    Ой, посмотрел пост, в котором должна была быть ссылка... Нету. Наверное забыл вставить. Даю здесь:
    WildCircuits: Optical Mouse Hacking
    Описано подключение оптического сенсора ADNS-5020-en к ардуино. Ну и даташит на ADNS-5020-en тоже никто не отменял:
    ADNS-5020-EN datasheet(11/24 Pages) AVAGO | Optical Mouse Sensor
     
  6. evgeny2k

    evgeny2k Новичок

    Сообщения:
    18
    Симпатии:
    3
    Может Вы таки глянете в даташит на сенсор и перевернете несколько страниц, прежде чем что-то писать? Для начала гляньте вот на эту схемку из даташита, где показано рекомендованное подключение чипа к контроллеру.
    ADNS-5020-EN datasheet(7/24 Pages) AVAGO | Optical Mouse Sensor
    Потом, с пониманием схематики, открываем первую страницу даташита:
    ADNS-5020-EN datasheet(1/24 Pages) AVAGO | Optical Mouse Sensor
    ... и читаем вот такой текст:
    The sensor is programmed via registers through a three-
    wire SPI interface. It is housed in an 8-pin staggered dual
    in-line package (DIP)

    Можно посмотреть и другие странички. Тогда возникнет полное понимание того, что надпись SDIO на выводе чипа - это не название интерфейса, а всего лишь придуманное производителем обозначение ноги со смысловым содержанием MISO+MOSI в одном флаконе.
     
  7. evgeny2k

    evgeny2k Новичок

    Сообщения:
    18
    Симпатии:
    3
    Вот согласно статье и делал. Только вместо Arduino - ESP, и язык Micropython. Просто портировал код Arduino на Python. И не работает. Потому и пишу в форум. Не ради спора об интерфейсах. Я проверил стандартный вариант подключения SPI 4 линии на имеющемся 10DOF и всё взлетело. Этот 10DOF также может по 3-х проводному варианту работать. Попробовал - не взлетело. Проблема точно такая же, как и с оптическим сенсором. Склонен думать, что таки в питонячей реализации SPI какой-то затык, но хотелось бы уточнить. Может кто-то таки заводил 3-х проводной вариант на micropython? Может какая-то хитрость есть?
     
  8. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.053
    Симпатии:
    175
    Затык скорее всего в том, что вы соединяете 2 ноги, и нога выхода шунтирует ногу входа. По идее, ее, когда она не используется, надо переводить в высокоимпедансное состояние. Как бы делал я... Мышиный датчик живет в двух режимах: инициализации - когда в его регистры записываются снаружи параметры и рабочем, когда датчик гонит наружу информацию о движении. Оба этих режима - однонаправленые. Поэтому ногу контроллера X соединяем с CDIO датчика, а ногу контроллера Y через балластные 10K сажаем на землю.
    В начале инициализации назначаем MOSI контроллера на ногу X, а MISO на ногу Y. Вбрасываем в датчик пачку параметров.
    В конце инициализации назначаем MISO контроллера на ногу X, а MOSI на ногу Y. Потом тупо ловим то что прилетает из датчика по SPI.
    Как то так.
     
    Сергей_Ф нравится это.
  9. nikolz

    nikolz Гуру

    Сообщения:
    5.050
    Симпатии:
    462
    Можно иначе.
    Надо ногу на вывод переводить в третье состояние перед режимом ввод. Это можно сделать сменив режим работы у этого пина на пин ввода.
    Но об это я писал с самого начала, что надо переписать драйвер либо добавить соответствующий код перед сменой режима.
    Вообще-то не очень понятно зачем получать геморой с микро питоном, если можно тоже самое получить с луа либо с СИ. На си вообще задача решается без проблем.
     
    Юрий Ботов нравится это.
  10. evgeny2k

    evgeny2k Новичок

    Сообщения:
    18
    Симпатии:
    3
    Вопрос снят. Сам виноват, не досмотрел. Из 3 купленных чипов ADNS-5020-en один оказался s2707. Этот гад визуально как две капли воды похож на 5020, но имеет USB интерфейс :) А я, зная, что покупал 5020 даже не посмотрел на маркировку! Прошу прощения, что занял у вас время!
    А на счет управления состоянием ног, дык я в первом посте это описывал. Именно так и делал, менял режим вход\выход в зависимости от операции. Теперь понятно, почему не работало :) Сейчас работает :) Еще раз всей аудитории мои извинения
     
    Юрий Ботов нравится это.

Поделиться этой страницей