mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-12-28 02:10:25 -07:00
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 <nefelim4ag@gmail.com>
This commit is contained in:
parent
b3ef9b4cb9
commit
02a7a93f7c
2 changed files with 9 additions and 4 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue