Расово неверный модуль SD

Тема в разделе "Arduino & Shields", создана пользователем DIYMan, 23 июн 2016.

  1. DIYMan

    DIYMan Guest

    Приветствую, уважаемые!

    Собственно, этот пост затеян для тех, кто по каким-то причинам не может поженить одновременную работу SD-модуля с другими железками, работающими по hardware SPI, например, с тем-же W5100 от Wiznet. Собственно, описание того, с чем столкнулся я, и будет изложено ниже. Итак...

    Есть у китайцев вот такой модуль SD: http://ru.aliexpress.com/item/New-A...-Storage-Expansion-Board-For/32259529871.html Работает, как водится, по SPI, на борту сразу стаб на 3,3В, и микруха-драйвер всего этого добра. Подключается и работает - на раз, к качеству карточек особо не требователен, работает с теми же китайскими. У меня в проекте используется в качестве даталоггера, к SPI подключен такэе графический LCD-экран на контроллере ST7920.

    И вот захотел я добавить в проект поддержку ещё одного шлюза между контроллером и внешним миром: был только Wi-Fi, захотелось ещё и по Ethernet. Прикупил отдельный модуль на W5100, и - давай подсоединять. А оно - не взлетает ни в какую: то не получается проинициализировать SD, то - W5100 не получает IP по DHCP.

    Пару вечеров копания в интернетах (спасибо вмес, кто так или иначе тогда помог - ребятам с ардуинору, саутй изиэлектроникс и великому гуглу) и мозгового штурма (наблюдая за результатом вызова функции Ethernet.localIP() и тупя в мониторе порта на 255.255.255.255) привели к следующим выводам: этот зараза-модуль, имею в виду SD - имеет жёсткую подтяжку линий данных SPI к питанию! И даже когда CS модуля в высоком уровне - линии всё равно тянутся вверх! Чем это нам чревато? Да всё просто - отключили вы модуль SD от SPI поднятием его линии выбора ведомого, а оно, сволочь, тянет линии SPI вверх. В этот момент ардуина пытается прочитать, чего там ей ответил W5100, например, читает - а в линии одни единички, она задрана вверх модулем!

    Какой вывод можно сделать из всего этого и как это добро победить? Вывод простой: юзать верные модули, это во-первых. Во-вторых, раз уж попался не самый верный модуль, то не отчаиваться, а исправить ситуацию. Поправить можно разными способами:

    1. Варварско-паяльный. Берём - и убираем подтяжку линий у модуля. Требует прямых рук для пайки (не мой случай, с мелочёвкой не могу), аккуратности, наличия ещё одного модуля в запасе (на всякий, вдруг с первым не прокатит :));

    2. Инженерно-технологичный: берём старую добрую 74HC125, и вешаем MISO SD-модуля через один канал микрухи, CS модуля запараллеливаем с выводом OE канала микрухи - всё!

    Строго говоря, мне второй способ видится более предпочтительным: во-первых, не корёжим модуль, обеспечивая некую прозрачность замены. Во-вторых, мне кажется, что лучше все линии MISO всех модулей, работающих по SPI - заводить через указанную микруху, т.к. неизвестно ещё - чего там китайцы с подтяжками намудрят завтра или послезавтра.

    Итог: пара лишних соединительных проводков и микруха - и сейчас у меня на макетке успешно трудятся SD, W5100 и LCD-экран, гоняя данные по одной шине. Думаю, когда буду добавлять туда nRF - всё будет так же прозрачно и без плясок с бубном из-за MISO. Во всяком случае - верю в это :)

    Такая вот шаурма.
     
    Alex19 и ИгорьК нравится это.
  2. ИгорьК

    ИгорьК Гуру

    От nRF24 еще никто без пряников не уходил... :) RFM69- куда надежнее.
     
    DIYMan нравится это.
  3. DIYMan

    DIYMan Guest

    Ну мы уже заложились на nRF, в принципе. Весна покажет, кто где с...л, как известно :) Если не устроит - будем думать за RFM69. У нас одно требование - чтобы в тиньку, желательно, уместилось - планируются выносные беспроводные модули с датчиками для проекта в подписи.
     
  4. ИгорьК

    ИгорьК Гуру

    [​IMG]
     
    DIYMan нравится это.
  5. DIYMan

    DIYMan Guest

    С этого места поподробней, пожалуйста - я записываю :)
     
  6. ИгорьК

    ИгорьК Гуру

    Дык... Вы про размер сказали - я фото в инете нашел.
    Модуль очень маленький , управляется по SPI и логика управления приблизительно как и nRF.
    Только на 433 Мгц (значит дальше бьет) и не глючный - пока не подделывают.
     
    DIYMan нравится это.
  7. AlexVS

    AlexVS Гик

    Столкнулся с данным феноменом, так и не докумекал причину.
    Решил по своему, беспроводно-софтверным путем.
    В файлах библиотеки SD пару строк закоментил и одну раскоментил, в результате SDCard посадил на soft SPI:
    в Sd2Card.cpp:
    Код (C++):
    //#define USE_SPI_LIB
    в Sd2Card.h:
    Код (C++):
    #define MEGA_SOFT_SPI 1
    //#define USE_SPI_LIB
    далее по тексту ищем определение выводов и правим по вкусу:
    Код (C++):
    /** SPI chip select pin */
    uint8_t const SD_CHIP_SELECT_PIN = 10;
    /** SPI Master Out Slave In pin */
    uint8_t const SPI_MOSI_PIN = 11;
    /** SPI Master In Slave Out pin */
    uint8_t const SPI_MISO_PIN = 12;
    /** SPI Clock pin */
    uint8_t const SPI_SCK_PIN = 13;
     
    Последнее редактирование: 24 июн 2016