Автор Тема: Грязный железный хак [прототип] слабонервным - не нервничать  (Прочитано 7692 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн s_s

  • Пользователь
  • Сообщений: 41
    • Просмотр профиля
ret=spi_slave_transmit(VSPI_HOST, &t, portMAX_DELAY);нельзя в цикле так делать, либо вы должны ждать пока мастер не заберет байт.

&t вы структуру пихаете, а там по байтно нет?

И не изобретайте t.length=8; это вроде длина буфера, попробуйте так же и t.length=1  может это 1-байт
        t.tx_buffer=sendbuf; перед структурой добавьте sendbuf[0]=0xF7; в зависимости от порядка байт либо вверх либо старт
        t.rx_buffer=NULL; //recvbuf;
и добавьте после ret=spi_slave_transmit, в качестве эксперимента, задержку секунд так 2-5, хватит что бы мастер забрал.
Я бы покопал функцию spi_slave_transmit(), я по этому и пишу что весь архив нужен.
Вы через такой конвертер уровней подключаете

Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
unijoysticle2.nes.src.zip (7.89 КБ - загружено 6 раз.)
Признайтесь, товарищи, кто из вас смог/пытался скомпилировать? С какой целью скачивал?
« Последнее редактирование: 05 Декабрь 2019, 10:13:49 от xpk2k »

Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
удалось добиться стабильной работы esp32  как джойстика на симуляторе считываний джойстика при уровне сигналов 3.3в. По фронту сигнала latch дергается прерывание и засылаются нажатые кнопки.
на приставке при уровнях сигналов 5в (без согласования уровней, напрямую latch,clk,d0 на GPIO5,18,23) может повезти, и проработает пару секунд, потом прерывание виснет.
если поставить диоды на latch и clk - прерывание не просто виснет, а паникует и ребутится.

Оффлайн s_s

  • Пользователь
  • Сообщений: 41
    • Просмотр профиля
Эту тему с преобразователями уровней я уже прошел
Напрямую не подключал SPI к плате Dendy, через преобразователь уровня 5*3,3.
Перепробовал почти все варианты, и на резисторах и на диодах, во всех нарушалась осциллограмма сигналов со стороны 5В.
Только подошел стандартный преобразователь 5*3,3В, это который на полевых транзисторах.

Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
Смысла весь код с файлами выкладывать нет. Подправил слегка этот пример spi_slave для для того, чтобы ESP32 начала вести себя как джойстик, и по очереди строку символов по байту заправить в SPI3
код spi_slave:

код spi_host (подправленный проект ArduinoGameController):
Что оказалось забавным, этот код по сути рабочий, с одним "НО" - spi засылает биты инвертированными в двух смыслах слова "инвертировать". Если то, что первым отправляется 0b10000000 (начиная со старшего бита, в доках написано что в порядке битов 7:0, потом второй байт в порядке битов 15:8) нужно было просто вычитать в доках, то то, что отправка 0b00000000 - это высокий уровень на MISO... это было откровением для меня, т.к. все доки и картинки в них рисуют передачу бита 1 высоким уровнем напряжения на MOSI. Значит ли это, что та же логика кодирования бита верна для MISO не знаю.
Получив более-менее стабильный результат от этого примера (на 2 процессора - один цикл, котрый только отправляет байт в SPI), перенес логику в общую кучу кода (где вся блютус муть и потоков разных, прерывания). И тут всплыло "НО №2" - биты засланные в SPI по неизвестной причине начинают задерживаться, растягиваться и "сползать", на более поздние фронты sclk, ну и какие-то непонятные "перепрыгивания" - отправляешь в SPI 0b10000000 (предварительно перекинув биты -> 0b01111111) - на принимающем конце 0b10010000, или например, заряжаешь в SPI 0b00010000 - вынимаешь 0b00000110, 0b00001000 - 0b00000011,  0b00000100 - 0b00000001, а 0b00000011 - 0b00000000.
Cудя по картинкам логики кодирования данных джойстиком
SPI в режиме slave срабатывает не на правильном фронте sclk:
Вывод - SPI вовсе срабатывает в середине между фронтами. Вывод о причинах "сползания" делайте сами, но я решил, что драйвер SPI тормозит и не подходит.

Оффлайн s_s

  • Пользователь
  • Сообщений: 41
    • Просмотр профиля
Atmega подходит, STM32 подходит, ESP32 что не подходит?
    hspi1.SPI_CPOL=SPI_CPOL_High; // полярность сигнала SCK PI_POLARITY_LOW (CPOL=0) и SPI_POLARITY_HIGH (CPOL=1)
    hspi1.SPI_CPHA=SPI_CPHA_1Edge; // фаза сигнала SCK  SPI_PHASE_1EDGE (CPHA=0) и SPI_PHASE_2EDGE (CPHA=1)

Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
Ну драйвер spi у esp32 какой-то свой и со своими особенностями:
https://www.esp32.com/viewtopic.php?t=5788.
Проверил все 4 варианта режима - разницы не заметил. Результат такой же как я писал раньше.
Конвертер уровней спаял по схеме:

Но это не помогло.

Оффлайн s_s

  • Пользователь
  • Сообщений: 41
    • Просмотр профиля
Я, для первой пробы, так сказать проверки, сам уровни подавал, плюсик минусик, а data на светодиод, смотрел моргает нет.
Atmega сразу пошла, там 5 вольт, без всяких преобразователей уровня.

А Stm32, здесь если бы не осциллограф, я бы так и не знал, у HC368 и CPU вообще нагрузочной способности портов по ходу нет,
изменялась форма осциллограммы сигналов latch и clk. Главное эти сигналы latch и clk подать, а data на осциллограф.

В той ссылке пример spi_slave с DMA, как то у них DMA легко включается, это полный код?

Вы осциллограммы смотрели?
Вам отладчик доступен?


Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
Вкрутил уже упомянутый ранее код считывания данных из джойстика в arduino nano, чтоб работать с 5в логикой.
Код считывает джойстик.
Намерял несколько сигналов на дешевый цифровой осциллограф.
На первой фотке - просто сигнал clk от ардуины. Осцилл. безбожно шумит, но уровень угадать можно.
На второй - сигнал clk через диод. Фотка смазана, но вроде диод картину стгнала в общих чертах сохраняет.
на третьей - нажата кнопка "лево" крестовины джоя, и сигнал с его data.
на четвертой - наплевал на все кнопки - сигнал data прогнулся.
Замерял что показывает конвертер уровней
Ну драйвер spi у esp32 какой-то свой и со своими особенностями:
https://www.esp32.com/viewtopic.php?t=5788.
Проверил все 4 варианта режима - разницы не заметил. Результат такой же как я писал раньше.
Конвертер уровней спаял по схеме:

Но это не помогло.
Фоткать не стал, но сигнал clk конвертируется сносно. будем считтать, что так же как через диод.
На пятой фотке - еще раз сигнал clk ардуинины.
На шестой - засада в форме сигнала clk на приставке Bitman2. Причем на картинке выловлен хоть на что-то похожий сигнал, а в промежутках между - шарашит какой-то адский мусор.
Так что, использование SPI под большим вопросом, да и мучаться писать на прерываниях - сомнительная затея.

Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
финал затеи. все трудности позади. кроме БТ-джойстиков прикрутил питание от микро-УСБ и через этот разъем можно прошивку esp32 менять не разбирая.

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
xpk2k, чем всё в итоге то кончилось? ты от китайской платы джоя то ушёл?

P.S. заразил ты меня своим джоем, делаю адаптер для подключения всего что найду под рукой к дримкасту, делаю на stm32f103c8t6
« Последнее редактирование: 22 Май 2020, 01:03:14 от megavolt85 »

Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
xpk2k, чем всё в итоге то кончилось? ты от китайской платы джоя то ушёл?

P.S. заразил ты меня своим джоем, делаю адаптер для подключения всего что найду под рукой к дримкасту, делаю на stm32f103c8t6
каплю джоя для красоты заменил нормальными микросхемами сдвиговых регистров 4021N. обпаял резисторами по 100КОм вместо номиналов в схеме джойстика (кроме R1, R2, их не паял). все кнопки на 8+8=16 ноги GPIO у ESP32.
проверил, как ведет себя, если подключить джойстик в разъем, - проводной джойстик выигрывает. блютусных будто и небыло.
В stm32f103c8t6 что будешь подключать, кроме USB? у ESP32 универсальность через блютуз, который есть во всех современных джойстиках от приставок почти.
Леша кластер делал переходник джойстиковый на сегу:
улучшить мой проджект можно переводом на SPI, если побороть формы сигналов, как тут. Но мне лень.

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 1464
  • Пол: Мужской
    • Просмотр профиля
В stm32f103c8t6 что будешь подключать, кроме USB?

USB там какбы не в режиме хоста, а я девайс пилю не для подключения к компу, я цепляю перефирию именно к дриму

Леша кластер делал переходник джойстиковый на сегу:

честно говоря я Лёху уважаю, но не в дримкастовских вопросах, скажем так, я бы в том адаптере обошёлся без FPGA даже на ATMEL (я знаю только одного человека который постиг дзен, в смысле maple, это масяня, я даже сначала взял кусок кода для передачи из его проекта, но потом полностью переписал его для более быстрой отправки данных)

ну а если говорить про арм, то я уже реализовал эмуляцию клавы, мыши, PS1/PS2 и SATURN контроллера, на очереди джой от мегадрайва
плойковские джои эмулят и вибропак, но естественно эмуляция не полноценная
так же я эмулирую VMU на 16 банков, но тут не так всё гладко, в WINCE играх VMU эмулится только если я использую джои, при клаве и мышке не хватает процессорного времени, я пока ищу варианты как обойти это ограничение

в целом планирую выпустить в свет адаптер уже в этом месяце

P.S. общался с буржуями, они тоже лепят девайс для maple шины, думал обменяться полезной инфой, но как оказалось обмениваться нечем, у всех почему то становятся квадратными глаза когда я говорю что maple свободно эмулится на stm32f103c8t6
« Последнее редактирование: 04 Июнь 2020, 00:51:21 от megavolt85 »

Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
Свежий софт в тему: https://github.com/darthcloud/BlueRetro
Есть схемы запиливания на nes, snes, saturn: https://github.com/darthcloud/BlueRetroHW/tree/master/DIY
В будущем заявлены претензии работы на всехпревсех консолях: Saturn, N64, GameCube & Dreamcast are supported with simultaneous 4+ players using a single adapter. Soon Atari 5200, NES, SNES, Genesis/Megadrive, PSX, PS2, PCE....

https://hackaday.io/project/170365-blueretro

Оффлайн xpk2k

  • Пользователь
  • Сообщений: 52
    • Просмотр профиля
PSX / PS2 adapter cable набросал облегченный вариант BlueRetro для ps2
231315-0
последовательность действий:
1. взять модуль esp-wroom-32
2. снять крышку
3. слесарить по пластику, стругать, паять
4. прошить
5. воткнуть в плейстейшон2
PROFIT!!!
231317-1  231319-2