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


#!/usr/bin/env python3
import sys
import os

def process_bitstream(input_path, output_path):
    if not os.path.exists(input_path):
        print(f"Error: File {input_path} not found.")
        return False

    with open(input_path, 'rb') as f:
        raw_data = f.read()

    file_size = len(raw_data)
    curr_pos = 4 # Пропускаем "LSCC"
    
    # Ищем позицию преамбулы Nexus (байт 0xB3)
    pos_b3 = -1
    for i in range(curr_pos, file_size - 3):
        if raw_data[i] == 0xb3 and raw_data[i - 1] in (0xbd, 0xbe, 0xbf):
            pos_b3 = i
            break

    if pos_b3 == -1:
        print("Error: Preamble not found!")
        return False

    end_header = pos_b3 - 4  # Точка отсечения заголовка (346 байт)
    
    # Извлекаем чистое тело битстрима (808325 байт)
    clean_bitstream = raw_data[end_header:]
    
    # !!! КЛЮЧЕВОЙ ШАГ: Зеркально разворачиваем биты в каждом байте для I2C (MSB-first)
    # Пример: 0b11000110 (0xC6) превратится в 0b01100011 (0x63)
    reversed_bitstream = bytes(int('{:08b}'.format(b)[::-1], 2) for b in clean_bitstream)

    with open(output_path, 'wb') as f:
        f.write(reversed_bitstream)
        
    print(f"Successfully processed!")
    print(f"Original size: {file_size} -> Stripped header ({end_header} bytes) -> Reversed bits.")
    print(f"Output saved to {output_path} ({len(reversed_bitstream)} bytes).")
    return True

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Usage: python3 parse_and_reverse.py <input.bit> <output.bin>")
        sys.exit(1)
    success = process_bitstream(sys.argv[1], sys.argv[2])
    sys.exit(0 if success else 1)