#!/usr/bin/env python3
import sys
import os
def clean_mcs_binary(input_path, output_path):
if not os.path.exists(input_path):
print(f"Ошибка: Файл {input_path} не найден.")
return False
with open(input_path, 'rb') as f:
raw_data = f.read()
file_size = len(raw_data)
print(f"Открыт файл из MCS: {input_path} ({file_size} bytes)")
# Ищем инвертированную преамбулу Nexus (байт 0xCD, перед которым идет 0xBD)
pos_cd = -1
for i in range(4, file_size - 3):
if raw_data[i] == 0xcd and raw_data[i - 1] == 0xbd:
pos_cd = i
break
if pos_cd == -1:
print("Ошибка: Инвертированная преамбула (BD CD) не найдена!")
return False
# Точка отсечения заголовка.
# Чтобы выравнивание 32-битных слов (4 байта) под I2C шину не съехало,
# мы отступаем ровно на 7 байт назад от найденного 0xCD.
# Это оставит перед преамбулой ровный массив служебных пустышек 0xFF.
end_header = pos_cd - 7
print(f"Заголовок LSCC успешно обнаружен. Точка отсечения: {end_header} байт.")
# Отрезаем перевернутый заголовок LSCC
clean_data = raw_data[end_header:]
# Сохраняем финальный файл прошивки (биты уже инвертированы компилятором!)
with open(output_path, 'wb') as f:
f.write(clean_data)
print(f"Готово! Чистый выровненный файл сохранен в: {output_path} ({len(clean_data)} байт)")
return True
if __name__ == "__main__":
# Передаем ваш файл LED_impl_1_new.bin (полученный из mcs через objcopy)
input_file = "LED_impl_1_new.bin"
output_file = "LED_final_i2c_ready.bin"
success = clean_mcs_binary(input_file, output_file)
sys.exit(0 if success else 1)