Miditech 4x4 Hack

Thekikgen
Чт 22 марта 2018 г., 2:51
В настоящее время у меня есть 2 USB MIDI 4x4 (4 дюйма / 4 Out) от производителя Miditech / Midiplus. Я думал, что можно сложить 2 на том же компьюте. Но поскольку у тезисов есть точно такой же продукт и идентификатор поставщика, и нет серийного номера, на самом деле невозможно сделать это. Таким образом, единственной альтернативой было купить интерфейс 8x8 для одного и того же производителя, в три раза больше цены MIDI 4x4...что я не.

Я не мог бы принять, что устройство все еще в порядке с USB, 8 портов 4 дюйма - 4 выхода, выходит прямо в мусор. Ничего не осталось, я открыл коробку, и внутри я обнаружил, что микроконтроллер был STMF103RC. Здесь начните идею возможного взлома с STM32duino !

У меня есть плата с программируемым и мощным чипом, нативным USB, а также со всей схемой для 4 MIDI в / 4OUT. Почему бы не переписать новую прошивку с нуля, как и для других UC семьи AVR ? Я мог бы даже расширить эту прошивку, чтобы включить режим слияния, через режим, конкретные режимы маршрутизации и фильтрации. Итак, создание окончательного интерфейса USB MIDI лучше, чем оригинал, и складывается с моей существующей...

Мне удалось активировать внутренний загрузчик, поддерживая штифт boot0 до высокого уровня, а штифт boot1 до низкого уровня. Мне пришлось упустить резисторы 2 на доске, потому что они отключали это . Я также подключил TX и RX сериала 1 к USB -серийному TTL, и через 2 часа я был готов загрузить новую прошивку в вещь с инструментом STMFlash.

Первоначальная прошивка Miditech / Midiplus была защищена от чтения. Я должен был принять «чип будет полностью стерт, если вы продолжите.." предупреждение.
Не проблема, поскольку взломать оригинальную прошивку не была моей целью.

Затем я начал с базовой прошивки, отправляющей «примечание включения/выключения» в серийный порт. И угадайте, что: это сработало в первый раз !

Затем я загрузил общий stmduino bootloader2.0 снова на плату с STMFlash и протестировал плату 4x4 как общий STMF103RC в Arduino IDE..с демонстрацией миди -эскиза. Опять же, это сработало на первом компиляции...И я могу обратиться к 4 последовательному порту, подключенному к 4 -го MIDI -разъемам с вариантом платы.

Для людей, заинтересованных в этом проекте, он здесь: https: // github.com/thekikgen/usbmidiklik4x4.
Я буду раздвинуть источник и инструкции позже....

Мадиас
Чт 22 марта 2018 13:36
Поздравляю!
Я думаю, что устройство может быть расширено через некоторые «мягкие» порты, и у вас есть много бесплатных булавок для создания расширения MIDI-CV для винтажных синтезаторов :)
О Sysex:
Я не знаю, как насчет статуса реализации SYSEX. Некоторое время назад я переписал какой-нибудь MIDI USB-код HID с оригинального форума Leaflabs, этот код вошел в функциональность Libarra USB HID, и теперь мы используем реализацию Arpuss.
Для краткости: были некоторые причуды с исходным кодом SYSEX, я не могу вспомнить, если я исправил это, и кажется, что исходный код (или мой переписанный код?) теперь присутствует в спрятке Arpuss.
Так что не удивляйтесь, если Sysex не работает, как ожидалось!
---> https: // github.com/arpruss/usbhid_stm32f1 (Все, что связано с MIDI)

ZMEMW16
Чт 22 марта 2018 г. 14:04
Моей первой реакцией были «какие колеса размера?' :ржу не могу:

Второе - вау - хороший

SRP

Thekikgen
Пн 26 марта 2018 г., 12:39
Некоторые новости об этом проекте:

У меня уже есть альфа -версия, способная отправлять от 4 x USB в 4x MIDI Out Serial...
Мне пришлось сражаться с кодом USB_MIDI LIB... Не очень чистый.

Итак, я думаю, что на этой неделе у меня будет работающая версия внедрения/Out....

Мадиас
Пн 26 марта 2018 г., 10:12
Как я уже сказал, я действительно не знаю, была ли библиотека дальше разработана.
Как я вижу @ https: // github.com/arpruss/usbhid_stm32 ... Sbmidi.CPP
Все «ручка» (входящие сообщения) не подкладываются в данный момент.
Это был мой базовый код из «старого», скрытого MIDI-USB, конечно, есть много различий, но я думаю, что структура может быть одинаковой:
// ACHTUNG: // für Midi Eingang die voids von usb_midi.cpp übernehmen -> siehe unten (sind auskommentiert im cpp file) // gadget: Name des USB-Device: usb_midi_device.c --> ab 285 ändern #include #include "MidiSpecs.h" #define ledpiny PC9 boolean flip=0; long sendtimer=millis(); void setup() { pinMode(ledpiny, OUTPUT); MidiUSB.begin(); // Serial2.begin(9600); } void loop() { // digitalWrite(ledpiny, MidiUSB.isConnected() ); /* void sendNoteOff(unsigned int channel, unsigned int note, unsigned int velocity); void sendNoteOn(unsigned int channel, unsigned int note, unsigned int velocity); */ if (millis()-sendtimer>=500) { if (flip==0) MidiUSB.sendNoteOn(1, 64, 127); else MidiUSB.sendNoteOff(1, 64, 0); flip=!flip; sendtimer=millis(); } MidiUSB.poll(); } void USBMidi::handleNoteOff(unsigned int channel, unsigned int note, unsigned int velocity) { digitalWrite(ledpiny,0); } void USBMidi::handleNoteOn(unsigned int channel, unsigned int note, unsigned int velocity) { if (velocity>=0) digitalWrite(ledpiny,1); } //void USBMidi::handleSysex(uint8_t cin, uint8_t midi0, uint8_t midi1, uint8_t midi2) {} void USBMidi::handleVelocityChange(unsigned int channel, unsigned int note, unsigned int velocity) {} void USBMidi::handleControlChange(unsigned int channel, unsigned int controller, unsigned int value) {} void USBMidi::handleProgramChange(unsigned int channel, unsigned int program) {} void USBMidi::handleAfterTouch(unsigned int channel, unsigned int velocity) {} void USBMidi::handlePitchChange(unsigned int pitch) {} void USBMidi::handleSongPosition(unsigned int position) {} void USBMidi::handleSongSelect(unsigned int song) {} void USBMidi::handleTuneRequest(void) {} void USBMidi::handleSync(void) {} void USBMidi::handleStart(void) {} void USBMidi::handleContinue(void) {} void USBMidi::handleStop(void) {} void USBMidi::handleActiveSense(void) {} void USBMidi::handleReset(void) {}

Мадиас
Пн 26 марта 2018 г., 10:15 утра
Вот несколько моих пробных испытаний:

Thekikgen
Чт 29 марта 2018 г., 2:04
Спасибо, Мадиас.
Я сделал большую очистку кода MIDI_USB.
5 файлов только для работы MIDI USB теперь необходимы. Я добавил много комментариев в.
Вы можете проверить это на моем git.
https: // github.com/thekikgen/usbmidiklik4x4

Я внедрил свой собственный класс MidixParser (уже использованный в моем едином USB Midi Arduino Interface) и удалил все мертвые код.
На данный момент все работает, включая Sysex, с таким же поведением других моих 4x4 (не автомобиль :-) ) Устройство с оригинальной прошивкой.
Я протестировал дистанцию ​​Sysex в размере 250 тыс. Я отправил и успешно получил файл sysex...
Обработка SYSEX не забуферен: она передается «на лету», ограничение размера больше на стороне хоста сейчас...
Итак, код готов к тег Beta1...

В настоящее время я работаю над функцией маршрутизации. Будет возможно направить один в (USB или серийный MIDI) на 8 целей: 4 USB в, 4 сериала Out.
Например, если мне понадобится слияние MIDI, я установлю серийный MIDI в 1/2/3/4 на USB в 1/серийном MIDI Out1...
Я хочу, чтобы это было изменено запатентованным Sysex.

Thekikgen
Пт 30 марта 2018 г. 12:13
Миди маршрутизатор сделал...Я могу преобразовать свой конвертер MIDI USB в MIDI Splitter или MIDI слияние, изменив настройку маршрутизатора пакета....
STM32F103 настолько быстр по сравнению с ATMEGA328P...Абсолютно не задержка даже при 300 ударов в минуту....

Мадиас
Пт 30 марта 2018 г., 19:53
Я немного рассмотрел вас, резо, хорошая работа, но разве вы не сняли весь код USB-MIDI для прохождения через? (Больше нет обработчиков) - Это нормально для интерфейса MIDI, но, возможно, не цель справиться с MIDI в другом проекте ?
Но: поздравляю взломать ваше устройство :) Цена на MIDI-интерфейс составляет около 50 евро (в Германии), была бы интересна для выполнения интерфейса 8IN-8OUT на эскизе. Проблема: даже самый большой STM32F103 имеет только 4 «реальных» серийных интерфейсов (возможно, это причина, почему 8x8 от того же производителя стоит гораздо дороже)

Thekikgen
Сб 31 марта 2018 г., 2:55
Привет, Мадиас.

Спасибо за ваш отзыв.
Вы правы в отношении обработчиков. Поскольку я использую свой собственный класс SARSER, мне нужно только управление пакетами USB MIDI в классе MIDIUSB.
Я вычистил все в файлах MIDI USB, которые не были утилит для моего проекта.
Много кода было мертва, как часть sysex. И я думаю, что мы могли бы снова почистить...

В любом случае, вероятно, лучше сделать новую реализацию с лучшим архитектурным подходом.
Например, используя метод Sethandlerxxx, а не наследование.
Что вы думаете ?

О самом проекте: команды SYSEX реализованы для настройки маршрутизации.
Я задокументировал это на GitHub. Конечно, этот проект может быть адаптирован для создания любого USB -интерфейса на основе семейства STM32F.
И мы можем сделать очень надежный 8x8 с 2 4x4 за меньшее количество денег, чем один коммерческий 8x8 !!

Я думаю начать взлом на Midi Prodipe 4i4o. У этого устройства много проблем: плохая прошивка, плохой проанализ, плохая поддержка Sysex, задержка...
Многие пользователи жалуются на форумах Music Gears.
Я не знаю, что там, но я полагаю, что -то вроде Miditech ;)

Мадиас
Сб 31 марта 2018 г., 6:06
[Thekikgen - Сб 31 марта 2018 г., 2:55] - В любом случае, вероятно, лучше сделать новую реализацию с лучшим архитектурным подходом.
Например, используя метод Sethandlerxxx, а не наследование.
Что вы думаете ?
Звучит хорошо для меня!
[Thekikgen - Сб 31 марта 2018 г., 2:55] - Я думаю начать взлом на Midi Prodipe 4i4o. У этого устройства много проблем: плохая прошивка, плохой проанализ, плохая поддержка Sysex, задержка...
Многие пользователи жалуются на форумах Music Gears.
Я не знаю, что там, но я полагаю, что -то вроде Miditech ;)
Могу поспорить, что интерфейс использует неправильный оптокуплер и/или неправильная схема тоже. Эта ошибка была совершена многими интерфейсами в прошлом, потому что компании хотят сэкономить несколько центов или просто невежественные. https: // www.миди.орг/спецификации/ITE ... зацикция.
Обновлять: https: // mitxela.com/Другой/CA33.PDF

Лучший работающий интерфейс, который у меня когда -либо владею (ED), - это «eMagic MT4» (и, безусловно, большой брат MT8, AMT8), они единственные, кто работает без проблем с модулем Clavia Nord (был синтером в 2000 -х годах с настоящими время sysex).

Thekikgen
Пн, 02 апреля 2018 г., 23:56
Всем привет. Ну, я закончил этот проект.
Это хорошо работает в моей настройке. :)

Мой второй Miditech 4x4 теперь также вспыхнул с моей собственной прошивкой. Я изменил их имена с MIDI1 и MIDI2 (через реализацию SYSEX), поэтому легко узнать, какие шестерни подключены к приложениям MIDI. Конфигурации хранятся в флэш -памяти.
Изображение


https: // www.YouTube.com/watch?v = 2jjrhm5 ... e = youtu.быть

Thekikgen
Пн 10 декабря 2018 г., 11:22
Всем привет.

Просто чтобы вы знали, что я адаптировал код моего другого проекта "Miditech Hack", чтобы разрешить компиляцию для доски "Bluepill", так что это больше не только "взлом" !!

Я успешно протестировал его с этими китайскими 2 $ досками, хорошо известными здесь, и это работает довольно хорошо, позволяя интерфейсу 3x3 USB MIDI Ports :-) .

Прошивка теперь является «двойной»: с конкретным сообщением MIDI SYSEX вы можете перезагрузить интерфейс в режиме USB Serial (CDC), а затем подключить клеммеру к виртуальному COM-порту, чтобы получить доступ к удобному пользователю меню конфигурации.

STM32Duino Rocks !

https: // github.com/thekikgen/usbmidiklik4x4

Моду
Пн 10 декабря 2018 г., 11:47
Хорошие вещи, спасибо, что поделились.

Сэндрин
Сб 09 марта 2019 г. 15:04
Я знаю, что это устаревший пост, но у меня также есть Midiplus 4x4, и он недавно заметил (при разработке проекта MIDI), что эта вещь вообще не проходит Sysex, поэтому я, конечно, заинтересован в этом альтернативном, но причина я решил Опубликовать, я недавно купил еще один продукт Midiplus. Midiplus miniengine Pro...
Это звучит великолепно (из -за французского чипа Dream Sam5400 GM синтезатора), но они ограничили альтернативные инструменты (я.эн. Нет ничего), и если на канале перкуссии есть сообщение об изменении программы (10), барабаны становятся фортепиано, навсегда требующим сброса завода, чтобы исправить.
Небрежное программирование!

Мне пришлось выяснить, что там было, поэтому после того, как слеза обнаружил STM32F405, и кажется, что MIDI направляется там, прежде чем он попадет в чип Dream (из -за слияния USB / TRS и OLED -дисплея, который, как я полагаю, я предполагаю))
Поэтому в ближайшем будущем я планирую переписать STM с чем-то лучшим и, возможно, поместить стандартный FW в чип Dream, хотя я подозреваю, что он уже там...

Кто -нибудь еще приступил к этой идее?

STM32F429 SRAM + EXT SRAM + TFT 16BIT с DMA