Загрузка данных


#!/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)