Нужна помощь в чтении регистра сдвига через SPI - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь декодировать сигналы, которые будут сдвигать регистры в моей стиральной машине. Регистры являются STP16CPC05, которые также являются драйверами светодиодов. Я пытаюсь получить статус от моей стиральной машины, как оставшееся время, какой цикл, проверить, сделано ли это и т. Д. С ESP12. Если я могу прочитать сигналы, поступающие на драйверы светодиодов, я могу определить, какие биты для какого светодиода, а затем определить состояние в моей программе.

Моей первой мыслью было использование пользовательского shiftin, но мне не повезло с этим (и якобы digitalread () все равно слишком медленный), и я везде читал, что мне следует «просто использовать SPI», так как он быстрее. Я смог успешно прочитать сигналы с помощью логического анализатора и даже создал скрипт для arduino pro mini, который эмулирует сигналы регистров, так что я могу легче отлаживать свой ESP12, не запуская мойщик весь день. Написание мастера SPI относительно легко, но раб - сложная часть. Вот код для Arduino Pro mini, чтобы он мог эмулировать сигналы омывателя:

// SPI master code for Arduino Pro Mini "washing machine clone"

#include <SPI.h>


void setup (void)
{

  SPI.begin ();

  SPI.setClockDivider(SPI_CLOCK_DIV8);

}


void loop (void)
{
  delayMicroseconds(200);
  SPI.transfer(0x00); //00 00 11 01 08   01 08 02 02 00   00 0C 67 66 80
  SPI.transfer(0x00);
  SPI.transfer(0x11);
  SPI.transfer(0x01);
  SPI.transfer(0x08);
  delayMicroseconds(180);
  SPI.transfer(0x01);
  SPI.transfer(0x08);
  SPI.transfer(0x02);
  SPI.transfer(0x02);
  SPI.transfer(0x00);
  delayMicroseconds(180);
  SPI.transfer(0x00);
  SPI.transfer(0x0C);
  SPI.transfer(0x67);
  SPI.transfer(0x66);
  SPI.transfer(0x80);
  delayMicroseconds(200);    
}

enter image description here

У кого-нибудь есть идеи, как сделать простой SPI-слэйв на ESP? Или есть лучший способ понюхать эту шину регистра сдвига? Тактовый сигнал составляет 1 МГц, поэтому он не очень быстрый. Мне нужно только прочитать 15 байтов за раз.

Это было многообещающе, но это было много работы, сводя это к тому, что я хочу: https://github.com/JiriBilek/WiFiSpi. Я могу заставить его распечатать данные один раз, но потом я думаю, что у него есть проблемы с сбросом прерывания приема, потому что это ожидает интерактивного мастера.

1 Ответ

0 голосов
/ 11 ноября 2018

В пакете esp8266 Arduino есть библиотека SPISlave. С примерами. (В прошивке Иржи Билека есть только модифицированная копия.)

...