Нужна помощь в чтении регистра сдвига через SPI

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

Моей первой мыслью было использовать собственный сдвиг, но мне с этим не повезло (и, предположительно, 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);    
}

введите здесь описание изображения

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

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


person dreed75    schedule 10.11.2018    source источник


Ответы (1)


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

person Juraj    schedule 10.11.2018
comment
Да, я попробовал это до того, как нашел Jiri, и у меня была похожая проблема. В этом случае некоторые байты окажутся в регистре состояния, а некоторые — в регистре данных, и я не мог понять, как последовательно их извлекать. Если бы в IDE был отладчик, я бы, наверное, разобрался, но я слишком нуб. Мне нужно видеть, что происходит в памяти. - person dreed75; 11.11.2018