From 69f3b88a3f472c36047304f835ecb6285af23ad1 Mon Sep 17 00:00:00 2001 From: Timofey Titovets Date: Sun, 21 Dec 2025 20:19:22 +0100 Subject: [PATCH 1/2] sht3x: fix exception type Since 0bdee6b query commands return printer.command_error Signed-off-by: Timofey Titovets --- klippy/extras/sht3x.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/klippy/extras/sht3x.py b/klippy/extras/sht3x.py index c4fb22960..8151bd462 100644 --- a/klippy/extras/sht3x.py +++ b/klippy/extras/sht3x.py @@ -56,7 +56,7 @@ class SHT3X: self.reactor = self.printer.get_reactor() self.i2c = bus.MCU_I2C_from_config( config, default_addr=SHT3X_I2C_ADDR, default_speed=100000) - self._error = self.i2c.get_mcu().error + self._error = self.printer.command_error self.report_time = config.getint('sht3x_report_time', 1, minval=1) self.deviceId = config.get('sensor_type') self.temp = self.min_temp = self.max_temp = self.humidity = 0. From 9c6853f403909a8dfb9bc9939c5c7e16d1e9b3af Mon Sep 17 00:00:00 2001 From: Timofey Titovets Date: Sat, 20 Dec 2025 16:56:41 +0100 Subject: [PATCH 2/2] tmc: optimize SPI read resource utilization TMC dump endpoints do high frequency queryes Because write and query happen one after another That not only adds additional overhead on the reactor But can consume 2 distinct write packages to the mcu Do a small optimization by packing them in one call Signed-off-by: Timofey Titovets --- klippy/extras/bus.py | 4 ++-- klippy/extras/tmc2130.py | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/klippy/extras/bus.py b/klippy/extras/bus.py index 19e278418..bc5f4e559 100644 --- a/klippy/extras/bus.py +++ b/klippy/extras/bus.py @@ -111,10 +111,10 @@ class MCU_SPI: return self.spi_transfer_cmd.send([self.oid, data], minclock=minclock, reqclock=reqclock) def spi_transfer_with_preface(self, preface_data, data, - minclock=0, reqclock=0): + minclock=0, reqclock=0, retry=True): return self.spi_transfer_cmd.send_with_preface( self.spi_send_cmd, [self.oid, preface_data], [self.oid, data], - minclock=minclock, reqclock=reqclock) + minclock=minclock, reqclock=reqclock, retry=retry) # Helper to setup an spi bus from settings in a config section def MCU_SPI_from_config(config, mode, pin_option="cs_pin", diff --git a/klippy/extras/tmc2130.py b/klippy/extras/tmc2130.py index 181fe07ae..953eb486d 100644 --- a/klippy/extras/tmc2130.py +++ b/klippy/extras/tmc2130.py @@ -192,20 +192,25 @@ class MCU_TMC_SPI_chain: share = "tmc_spi_cs" self.spi = bus.MCU_SPI_from_config(config, 3, default_speed=4000000, share_type=share) + self._error = self.printer.command_error self.taken_chain_positions = [] def _build_cmd(self, data, chain_pos): return ([0x00] * ((self.chain_len - chain_pos) * 5) + data + [0x00] * ((chain_pos - 1) * 5)) def reg_read(self, reg, chain_pos): cmd = self._build_cmd([reg, 0x00, 0x00, 0x00, 0x00], chain_pos) - self.spi.spi_send(cmd) if self.printer.get_start_args().get('debugoutput') is not None: + self.spi.spi_send(cmd) return { "spi_status": 0, "data": 0, "#receive_time": .0, } - params = self.spi.spi_transfer(cmd) + # Optimize read by grouping write + transfer request + try: + params = self.spi.spi_transfer_with_preface(cmd, cmd, retry=False) + except self._error: + params = self.spi.spi_transfer(cmd) pr = bytearray(params['response']) pr = pr[(self.chain_len - chain_pos) * 5 : (self.chain_len - chain_pos + 1) * 5]