- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 565
- Реакции
- 14
Народ, кто плотно сидит на KMBox B Pro, наверняка ловили этот бесячий NG Screen (No Good), когда девайс просто уходит в ребут при попытке вызвать boot.py или банальный km.move().
Суть проблемы: стандартный запуск через внутренний скрипт иногда триггерит защиту или баг прошивки, из-за чего коробка виснет. Нашел рабочий костыль — мы будем имитировать логику загрузки, отправляя команды напрямую через COM-порт, обходя штатный порядок инициализации.
Что делает этот метод:
Сам скрипт на Python:
Метод не идеальный, но как временное решение, чтобы оживить кирпич или обойти кривой бут — работает стабильно.
Кто уже ковырял новые ревизии прошивок, есть ли смысл перешиваться или лучше оставаться на старых стабильных билдах?
Суть проблемы: стандартный запуск через внутренний скрипт иногда триггерит защиту или баг прошивки, из-за чего коробка виснет. Нашел рабочий костыль — мы будем имитировать логику загрузки, отправляя команды напрямую через COM-порт, обходя штатный порядок инициализации.
Что делает этот метод:
- Открывает прямой канал через Serial.
- Инициализирует частоту опроса и скорость передачи (baud rate).
- Настраивает кривые движения (Bezier/Missile tracking).
- Позволяет на лету менять VID/PID, чтобы минимизировать шансы детекта по железу.
- Выводит кастомную инфу на TFT-экранчик девайса.
Сам скрипт на Python:
Код:
import serial
import time
# Подключаемся к своему COM-порту
s = serial.Serial('COM28', 115200, timeout=1)
def send_command(command):
s.write((command + '\r\n').encode('utf-8'))
time.sleep(0.1) # Даем девайсу переварить команду
# Базовые конфиги
mcu = 500
rate = 115200
trace_type = 0
send_command(f'km.freq({mcu})')
send_command(f'km.baud({rate})')
send_command(f'km.trace_type({trace_type})')
# Режим работы (1: USB, 6: USB+BT)
mode1 = 1
bt1 = 0
send_command(f'bt.enable({bt1})')
send_command(f'km.mode({mode1})')
# Смена VID/PID — мастхэв для скрытности
send_command('device.VID("04d9")')
send_command('device.PID("a09f")')
send_command('device.enable(1)')
send_command('km.delay(100)')
# Отрисовка статуса на экране
send_command('tft.fill(TFT.BLACK)')
send_command('tft.text((2, 15), "Kmbox B Pro", TFT.RED, sysfont, 2, nowrap=True)')
send_command('tft.text((22, 80), "OK", TFT.GREEN, sysfont, 8, nowrap=True)')
# Тестовое микродвижение для проверки
send_command("km.move(10,0)")
s.close()
1. VID/PID: В примере стоят дефолтные значения, лучше смените на свои от какой-нибудь старой мышки, чтобы античит меньше триггерился.
2. Trace Type: 0 — это кривые Безье, 1 — более жесткий трекинг. Для легита лучше оставлять 0.
3. NG Screen: Если девайс всё равно падает в NG при вызове km.trace_enable(), просто закомментируйте эту строку, она часто вызывает конфликты на свежих прошивках.
2. Trace Type: 0 — это кривые Безье, 1 — более жесткий трекинг. Для легита лучше оставлять 0.
3. NG Screen: Если девайс всё равно падает в NG при вызове km.trace_enable(), просто закомментируйте эту строку, она часто вызывает конфликты на свежих прошивках.
Метод не идеальный, но как временное решение, чтобы оживить кирпич или обойти кривой бут — работает стабильно.
Кто уже ковырял новые ревизии прошивок, есть ли смысл перешиваться или лучше оставаться на старых стабильных билдах?