Bladeren bron

Разработка тестера.

TelenkovDmitry 7 maanden geleden
bovenliggende
commit
5766e17e43

BIN
doc/testing/Алгоритм тестирования MDIO88.pdf


BIN
output/fw.bin


File diff suppressed because it is too large
+ 415 - 435
project/ewarm/iap/iap.dep


File diff suppressed because it is too large
+ 661 - 661
project/ewarm/module_universal_io.dep


+ 1 - 1
project/ewarm/module_universal_io.ewp

@@ -225,7 +225,7 @@
                     <state>AT_START_F403A_V1</state>
                     <state>PRINTF_STDLIB</state>
                     <state>DEBUG</state>
-                    <state>MAI_12</state>
+                    <state>MDIO_88</state>
                 </option>
                 <option>
                     <name>CCPreprocFile</name>

+ 22 - 8
tools/tester/artery_loader.py → tools/artery_loader.py

@@ -4,6 +4,8 @@ from typing import Iterable, Union, Optional, Tuple
 from serial import Serial
 import shutil
 import subprocess
+import re
+import inquirer
 
 
 class ErrorAT32(IOError):
@@ -208,6 +210,18 @@ class FlashAT32:
 			self.write_flash(address, f.read())
 
 
+def menu_test():
+	questions = [
+	inquirer.List('size',
+                message="What size do you need?",
+                choices=['Jumbo', 'Large', 'Standard', 'Medium', 'Small', 'Micro'],
+            ),
+	]
+	answers = inquirer.prompt(questions)
+	print(answers)
+
+
+
 if __name__ == '__main__':
 
 	# Копируем бинарники и добавляем CRC в fw.bin
@@ -218,8 +232,9 @@ if __name__ == '__main__':
 	# print('Добавление CRC в fw.bin')
 	# os.startfile('bin\crc_ewarm.exe')	
 
+	"""
 	start_time = time.time()
-	d = FlashAT32('COM3', 115200 * 1)
+	d = FlashAT32('COM53', 115200 * 8)
 	d.DEBUG_PRINT = True
 	try:
 		d.connect()
@@ -228,18 +243,17 @@ if __name__ == '__main__':
 	print(d.get_flash_size())
 	print(d.get_uid_str())
 
-	"""
 	d.erase_flash()
-	iap_path = '../output/iap.bin'
-	fw_path = '../output/fw.bin'
-	iap_path_r = '../output/m3_artery_iap.bin'
-	fw_path_r = '../output/m3_artery_fw.bin'
+	iap_path = 'bin/iap.bin'
+	fw_path = 'bin/fw.bin'
+	iap_path_r = 'bin/m3_artery_iap.bin'
+	fw_path_r = 'bin/m3_artery_fw.bin'
 	d.write_file_to_flash(0x08000000, iap_path)
 	d.write_file_to_flash(0x08021000, fw_path)
 	d.read_flash_to_file(0x08000000, os.path.getsize(iap_path), iap_path_r)
 	d.read_flash_to_file(0x08021000, os.path.getsize(fw_path), fw_path_r)
-	os.system(f'diff {iap_path} {iap_path_r}')
-	os.system(f'diff {fw_path} {fw_path_r}')
+	# os.system(f'diff {iap_path} {iap_path_r}')
+	# os.system(f'diff {fw_path} {fw_path_r}')
 	os.remove(iap_path_r)
 	os.remove(fw_path_r)
 

BIN
tools/tester/bin/fw.bin → tools/bin_dio/fw.bin


+ 0 - 0
tools/tester/bin/iap.bin → tools/bin_iap/iap.bin


+ 3 - 3
tools/digital_io.py

@@ -288,16 +288,16 @@ class IO_DigitalTester:
 def main():
     colorama.init(autoreset=True)
     
-    serial_port = Serial('COM7', 115200, timeout=0.05, parity='N', xonxoff=False)
+    serial_port = Serial('COM58', 115200, timeout=0.05, parity='N', xonxoff=False)
     
     modbus_tester = Modbus(serial_port, 1)
-    modbus_tester.MB_DEBUG = True
+    modbus_tester.MB_DEBUG = False
     # dev_tester = IO_Digital(modbus_tester)
     dio = IO_Digital(modbus_tester)
 
 
     '''Тесты отдельного модуля DIO'''
-    # dio.sys.get_system_vars()
+    dio.sys.get_system_vars()
     # print(dio.sys.get_save_mode())
     # print(dio.sys.get_save_delay())
     

+ 16 - 0
tools/misc.py

@@ -0,0 +1,16 @@
+
+
+
+def string_to_reg(value: str):
+    # test_str = value.ljust(32, ' ')
+    # print(f'Len = {len(test_str)}: {test_str}')
+    ascii_data = [ord(char) for char in value]
+    b = bytes(ascii_data)
+    print(len(b))
+    if len(b) < 32:
+        for _ in range(32 - len(b)):
+            b += b'\0'
+    print(len(b))
+    # print(ascii_data)
+    print(b)
+

+ 0 - 0
tools/requiremets.txt → tools/requirements.txt


+ 55 - 32
tools/tester.py

@@ -1,51 +1,74 @@
-import digital_io
+import inquirer
 import time
+import os
+from artery_loader import FlashAT32
+import colorama
+from colorama import Fore
+
 
 class Tester:
 
-    def __init__():
-        pass
+    def __init__(self, debug_port):
+        self.debug_port = debug_port
+        colorama.init(autoreset=True)
+    
+    def menu(self):
+        questions = [
+	    inquirer.List('action',
+                message="Что делаем",
+                choices=['Прошить IAP и FW [MDIO_88]', 
+                        'Прошить IAP и FW [MAI_12]', 
+                        'Прошить IAP и FW [MAO_4]', 
+                        'Получить системные настройки'],
+            ),
+	    ]
+        answers = inquirer.prompt(questions)
+        if answers['action'] == 'Прошить IAP и FW [MDIO_88]':
+            self.write_iap_fw('bin_dio/fw.bin', 'bin_iap/iap.bin')
+        elif answers['action'] == 'Прошить IAP и FW [MAI_12]':
+            self.write_iap_fw('bin_ai/fw.bin', 'bin_iap/iap.bin')
+        elif answers['action'] == 'Прошить IAP и FW [MAO_4]':
+            self.write_iap_fw('bin_ao/fw.bin', 'bin_iap/iap.bin')
 
 
-def string_to_reg(value: str):
-    # test_str = value.ljust(32, ' ')
-    # print(f'Len = {len(test_str)}: {test_str}')
-    ascii_data = [ord(char) for char in value]
-    b = bytes(ascii_data)
-    print(len(b))
-    if len(b) < 32:
-        for _ in range(32 - len(b)):
-            b += b'\0'
-    print(len(b))
-    # print(ascii_data)
-    print(b)
+    def write_iap_fw(self, path_to_fw, path_to_iap):
+        print(Fore.YELLOW + "Переведите устройство в режим загрузчика и нажмите 'Enter'")
+        input()
+        print('Начало обновления')
+        start_time = time.time()
 
+        d = FlashAT32(self.debug_port, 115200 * 8)
+        d.DEBUG_PRINT = True
+        try:
+            d.connect()
+        except Exception as e:
+            print(e)
+            print(Fore.RED + 'Что-то пошло не так!!!')
 
-def test_value(value):
-    if value in [0, 1]:
-        print('OK')
-    else:
-        print('Value error')
+        print(d.get_flash_size())
+        print(d.get_uid_str())
 
+        d.erase_flash()
+        iap_path = path_to_iap
+        fw_path = path_to_fw
+        iap_path_r = 'artery_iap.bin'
+        fw_path_r = 'artery_fw.bin'
+        d.write_file_to_flash(0x08000000, iap_path)
+        d.write_file_to_flash(0x08021000, fw_path)
 
-def test_range(value):
-    if value in range(60, 65536):
-        print('OK')
-    else:
-        print('Value error')
+        print(Fore.GREEN + f'Запись прошла успешно за {time.time() - start_time} сек.')
 
 
+class DUT:
+    def __init__(self):
+        pass
+
 
 def main():
-    # print(time.time())
+    tester = Tester('COM53')
+    tester.menu()
 
-    # for i in range(12):
-    #     data = format(1 << i, '16b')
-    #     print(data)
 
-    # string_to_reg("Hello world!!!")
-    # test_value(3)
-    test_range(65536)
 
 if __name__ == '__main__':
     main()

BIN
tools/tester/bin/crc_ewarm.exe


+ 42 - 0
tools/tester_dio.py

@@ -0,0 +1,42 @@
+from tester import *
+from modbus import Modbus
+from digital_io import IO_Digital
+from serial import Serial
+
+class DIO_Tester(Tester):
+    def __init__(self, dut_debug_port, mb_port, tester_addr=1, dut_address=2):
+        super().__init__(dut_debug_port)
+
+        serial_port = Serial(mb_port, 115200, timeout=0.05, parity='N', xonxoff=False)
+        modbus = Modbus(serial_port, tester_addr)
+        self.dev_tester = IO_Digital(modbus)
+
+
+
+    def menu(self):
+        questions = [
+	    inquirer.List('action',
+                message="Тестирование MDIO_88",
+                choices=['Прошить IAP и FW', 
+                        'Получить системные настройки'],
+            ),
+	    ]
+        answers = inquirer.prompt(questions)
+
+        if answers['action'] == 'Прошить IAP и FW':
+            self.write_iap_fw('bin_dio/fw.bin', 'bin_iap/iap.bin')
+        elif answers['action'] == 'Получить системные настройки':
+            print('получение системных настроек')
+            # self.dev_tester.sys.get_system_vars()
+            print(self.dev_tester.sys.get_uptime())
+
+
+
+
+def main():
+    tester = DIO_Tester('COM53', 'COM58', 1, 2)
+    tester.menu()
+
+
+if __name__ == '__main__':
+    main()

Some files were not shown because too many files changed in this diff