test_init.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import serial
  2. import time
  3. import sys
  4. def precise_sleep(duration):
  5. end = time.perf_counter() + duration
  6. while time.perf_counter() < end:
  7. pass
  8. def try_init(port, baudrate):
  9. print(f"\n--- Trying {baudrate} baud ---")
  10. try:
  11. ser = serial.Serial(port, baudrate=baudrate, timeout=0.5)
  12. ser.rts = False
  13. ser.dtr = False
  14. ser.break_condition = False
  15. time.sleep(1.0)
  16. # Bit-bang 0x08 at 5 baud
  17. address = 0x08
  18. # Start bit
  19. ser.break_condition = True
  20. ser.rts = True
  21. ser.dtr = True
  22. precise_sleep(0.2)
  23. for i in range(8):
  24. bit = (address >> i) & 1
  25. low = (bit == 0)
  26. ser.break_condition = low
  27. ser.rts = low
  28. ser.dtr = low
  29. precise_sleep(0.2)
  30. # Stop bit
  31. ser.break_condition = False
  32. ser.rts = False
  33. ser.dtr = False
  34. precise_sleep(0.2)
  35. ser.reset_input_buffer()
  36. print("Waiting for response...")
  37. response = ser.read(10)
  38. print(f"Received ({len(response)} bytes): {response.hex()}")
  39. ser.close()
  40. except Exception as e:
  41. print(f"Error: {e}")
  42. if __name__ == "__main__":
  43. import serial.tools.list_ports
  44. ports = [p.device for p in serial.tools.list_ports.comports() if 'usbserial' in p.device.lower() or 'ftdi' in p.description.lower()]
  45. if not ports:
  46. print("No FTDI ports found.")
  47. sys.exit(1)
  48. port = ports[0]
  49. print(f"Using port: {port}")
  50. try_init(port, 9600)
  51. time.sleep(2)
  52. try_init(port, 10400)
  53. time.sleep(2)
  54. try_init(port, 4800)