From 7d3f7a47ff552b189c5f45e80be95a64bb65ccb3 Mon Sep 17 00:00:00 2001 From: Roy Date: Tue, 15 Mar 2022 14:55:11 +0800 Subject: [PATCH 1/5] [update] change position of elite channel --- python/biopro/devlib/data.py | 48 ++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/python/biopro/devlib/data.py b/python/biopro/devlib/data.py index 1e3c3d2..d976086 100644 --- a/python/biopro/devlib/data.py +++ b/python/biopro/devlib/data.py @@ -882,20 +882,14 @@ class I4V4Z4T4DataDecoder(RecDataDecoder): if len(data) < 18: return None - current = struct.unpack('>i', data[1:5])[0] # unit: 1/1000 nA - voltage = struct.unpack('>i', data[5:9])[0] # unit: mV - impedance = struct.unpack('>i', data[9:13])[0] # unit: kOm - time_stamp: float = struct.unpack('H', data[17:19])[0] + time_stamp: float = struct.unpack('i', data[40:40+4])[0] - - # print('decode', list(data[20:])) - mem_wrong = data[40] - mem_retry_cnt = data[41] - mem_green_wrong = data[42] - mem_green_retry_cnt = data[43] + mem_wrong_information = struct.unpack(' Date: Tue, 15 Mar 2022 15:00:34 +0800 Subject: [PATCH 2/5] [update] update print message --- python/biopro/server/recording.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/biopro/server/recording.py b/python/biopro/server/recording.py index 4955b63..c98a87f 100644 --- a/python/biopro/server/recording.py +++ b/python/biopro/server/recording.py @@ -363,7 +363,7 @@ class RecordingProcess(Process): if (device == 7): print('self._last_cnt[7]:', self._last_cnt[7], ', last_data_cnt:', last_data_cnt) - print('skip RAM, but data is right, solve data', list(raw_data[i][0:3]), 'skip Ram', self._skip_ram_cnt, 'times') + print('skip RAM, but data is right, solve data', list(raw_data[i][0:3]),'|', list(raw_data[colum_total-1][0:3]), 'skip Ram', self._skip_ram_cnt, 'times') # print('data:') # print('|', list(raw_data[0])) # print('|', list(raw_data[1])) @@ -540,7 +540,7 @@ class RecordingProcess(Process): else: print_flag = True - print('delete data:', list(raw_data[i])) + print('delete data:', list(raw_data[i][0:3])) # if print_flag: # print('delete data context:') From df3c7db8bc382c8d093e3c25f17aa013239e74b2 Mon Sep 17 00:00:00 2001 From: Roy Date: Tue, 15 Mar 2022 15:01:55 +0800 Subject: [PATCH 3/5] [update] fix spi routine code and print log message when run_time >= 0.030 --- python/biopro/server/data.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/python/biopro/server/data.py b/python/biopro/server/data.py index c365d5a..297a192 100644 --- a/python/biopro/server/data.py +++ b/python/biopro/server/data.py @@ -1180,19 +1180,18 @@ class SpiRuntimeThread(ServerThread): run_time = time() - self._timer if run_time > 0.045: - print('time, recv_data_form_spi_routine_time', time(), run_time) + # print('time, recv_data_form_spi_routine_time', time(), run_time) + real_run_time = run_time run_time = 0.045 - if server.sync_started: - event.wait(self._interval - run_time) - sync.set_pin_mem_sel(True) - sleep(0.005) - return - else: - event.wait(self._interval - run_time) - sync.set_pin_mem_sel(True) - self.close() - return + if run_time >= 0.030: + print('time, recv_data_form_spi_routine_time >= 0.030', 'device:', c, datetime.now(), time(), real_run_time) + + event.wait(self._interval - run_time) + sync.set_pin_mem_sel(True) + sleep(0.005) + + return class RecRuntimeThread(ServerThread): def __init__(self, server: DataServer): From 1a3a833680c7eca96188d606c9df47e6cb5eb9b0 Mon Sep 17 00:00:00 2001 From: Roy Date: Tue, 15 Mar 2022 15:17:38 +0800 Subject: [PATCH 4/5] [update] green data has 12 byte, if ram read done, MEM_INS_MARKED = [5A,A5] --- python/biopro/impl/ext_mem.py | 64 +++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/python/biopro/impl/ext_mem.py b/python/biopro/impl/ext_mem.py index 91661a3..a5220cd 100644 --- a/python/biopro/impl/ext_mem.py +++ b/python/biopro/impl/ext_mem.py @@ -24,8 +24,10 @@ def zero_buffer(size: int) -> List[int]: return [0] * size class MultiExtMemSpiInterface(LowLevelHardwareInterface): - MEM_INS_MARKED = [MEM_INS_WRITE, 0, 2, 1, 1] - MEM_INS_RESET = [MEM_INS_WRITE, 0, 2, 1, 1, 0, 0xFF] + MEM_INS_MARKED1 = [MEM_INS_WRITE, 0, 2, 0x5A, 0xA5] + MEM_INS_MARKED2 = [MEM_INS_WRITE, 0, 6, 0x5A, 0xA5] + MEM_INS_MARKED3 = [MEM_INS_WRITE, 0, 10, 0x5A, 0xA5] + # MEM_INS_RESET = [MEM_INS_WRITE, 0, 2, 1, 1, 0, 0xFF] __slots__ = ('_selector', '_wait_for_first_data', '_spi', '_tx_buffer_header', '_tx_buffer_data', 'pin_busy', 'pin_mem_req', 'pin_mem_sel', 'pin_ram_sel', @@ -48,7 +50,7 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): self._single_data_len = self._elite_data_len + self._mem_header_len + self._mem_tailer_len # buffer - self._tx_buffer_header = [0] * 11 + self._tx_buffer_header = [0] * 19 self._tx_buffer_data = [0] * (self._single_data_len * 10 + 3) # memory control pin @@ -191,7 +193,7 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): self._head_wrong_cnt[device] = self._head_wrong_cnt[device] + 1 if (self._head_wrong_cnt[device] <= 5): # print 5 times print('data_first[0:3] != [255, 255, 255], device:', device, ',', self._head_wrong_cnt[device], 'times') - print(list(data[0:7])) + print(list(data[0:15])) data[0:3] = [255, 255, 255] # ---------------------------------------------------------------------------------------------- @@ -233,23 +235,41 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): # green_data = data # print("_[Debug] @ spi green data = ", green_data) - length = (data[3] << 8) | data[4] - header = data[7] - elite_data_len = data[9] + green_data_section1 = data[3:7] + green_data_section2 = data[7:11] + green_data_section3 = data[11:15] + + if green_data_section1 == green_data_section2: + green_data_section = green_data_section1 + + elif(green_data_section2 == green_data_section3 or green_data_section1 == green_data_section3): + print("green data not equal: = ", data[3:15]) + print("green data print:", data, device, datetime.now()) + green_data_section = green_data_section3 + + else: + print("green data not equal: = ", data[3:15]) + print("green data print:", data, device, datetime.now()) + green_data_section = green_data_section3 # use last data + + length = (green_data_section[0] << 8) | green_data_section[1] + header = data[15] + elite_data_len = data[17] + + if length <= 12: + if length < 12: + print("length < 12") + print("green data print:", data, device, datetime.now()) - if length <= 4: - # print("length <= 4") - # print("green data print:", data, device, datetime.now()) return None - if data[5] != 0 or data[6] != 0: + if green_data_section[2] != 0xA5 or green_data_section[3] != 0x5A: # give a default length if the data header did not update - length = 7000 print("green data: is not [0,0], = ", data[5:7]) print("green data print:", data, device, datetime.now()) return None - if (length >= 7000): + if (length >= 4000): flag_print = True print("green data: big length:", length) @@ -263,6 +283,7 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): if (flag_print): print("green data print:", data, device, datetime.now()) + print() # neulive # address += len(data) - 11 @@ -274,7 +295,7 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): # red_length = length - 1 # tx_d = [0] * red_length - address = 4 + address = 12 red_length = int(length / 2) tx_d = [0] * red_length @@ -319,9 +340,16 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): address += len(data) - 3 del data - # print("_[Debug] @ spi recv data rx = ") + # last_index = 0 + # print("_[Debug] @ spi recv data rx, ram_select:", self._pin_ram_sel_value[device], ",", datetime.now()) # for i in range(0, len(rx), self._single_data_len): - # print(rx[i:i+self._single_data_len]) + # last_index = i + # # print(rx[i:i+self._single_data_len]) + # if i == 0: + # print(rx[0:8], 'ram:', rx[47]) + + # if last_index != 0: + # print(rx[last_index:last_index+8], 'ram:', rx[last_index+47]) # print() # /* @@ -334,7 +362,9 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): # * */ # mark read - self._spi.send_byte(self.MEM_INS_MARKED) + self._spi.send_byte(self.MEM_INS_MARKED1) + self._spi.send_byte(self.MEM_INS_MARKED2) + self._spi.send_byte(self.MEM_INS_MARKED3) except BaseException as e: print(e) From 184c7536a6f1371858e53b0c23bee1391ec6aadd Mon Sep 17 00:00:00 2001 From: Roy Date: Tue, 15 Mar 2022 15:18:52 +0800 Subject: [PATCH 5/5] [update] fix error for reading spi(7000bytes) --- python/biopro/impl/ext_mem.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/python/biopro/impl/ext_mem.py b/python/biopro/impl/ext_mem.py index a5220cd..b1796aa 100644 --- a/python/biopro/impl/ext_mem.py +++ b/python/biopro/impl/ext_mem.py @@ -167,6 +167,29 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): print("read red data times", self._read_red_times) return data + def _print_ram_all_data(self): + addr = 0 + red_length = int(7000 / 2) + tx_temp = [0] * red_length + + while True: + tx_temp[0] = MEM_INS_READ + tx_temp[1] = ((addr >> 8) & 0xFF) + tx_temp[2] = (addr & 0xFF) + + ram_data = [] + ram_data = self._spi.send_byte(tx_temp) + ram_data[0:3] = [255, 255, 255] + print(list(ram_data), len(ram_data), addr) + addr += len(ram_data) - 3 + + if (7000 < addr + len(ram_data)): + del ram_data + break + print() + + return + def recv_memory(self, device: int) -> Optional[bytes]: self.pin_busy.output(False) @@ -261,6 +284,9 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): print("length < 12") print("green data print:", data, device, datetime.now()) + if length == 0: + self._print_ram_all_data() + return None if green_data_section[2] != 0xA5 or green_data_section[3] != 0x5A: @@ -276,6 +302,7 @@ class MultiExtMemSpiInterface(LowLevelHardwareInterface): if (header != 255): flag_print = True print("green data: header is not 255: ", header) + self._print_ram_all_data() if (elite_data_len != self._elite_data_len): flag_print = True