-
- import time
- import microcontroller
- import digitalio
-
- class SWD:
- def __init__(swdio, swclk):
- self.swdio = swdio
- self.swclk = swclk
-
- def swd_setup(self):
- self.swclk = digitalio.DigitalInOut(swclk)
- self.swclk.switch_to_output()
- self.swclk.value = 1
- self.swdio = digitalio.DigitalInOut(swdio)
- self.swdio.switch_to_output()
- self.swdio.value = 1
-
- def sw_clk_cycle(self):
- self.swclk.value = 0
- microontroller.delay_us(1)
- self.swclk.value = 1
- microcontroller.delay_us(1)
-
- def sw_write_bit(self, bit):
- self.swdio.switch_to_output()
- self.swdio.value = bit
- self.swclk.value = 0
- microcontroller.delay_us(1)
- self.swclk.value = 1
- microcontroller.delay_us(1)
-
- def sw_read_bit(self):
- self.swclk.value = 0
- microcontroller.delay_us(1)
- self.swdio.switch_to_input()
- bit = swdio.value
- self.swclk.value = 1
- microcontroller.delay_us(1)
- return bit
-
- def swd_transfer(self, request, data):
- parity = 0
- self.sw_write_bit(1)
- bit = request >> 0
- self.sw_write_bit(bit)
- parity += bit
- bit = request >> 1
- self.sw_write_bit(bit)
- parity += bit
- bit = request >> 2
- self.sw_write_bit(bit)
- parity += bit
- bit = request >> 3
- self.sw_write_bit(bit)
- parity += bit
- self.sw_write_bit(parity)
- self.sw_write_bit(0)
- self.sw_write_bit(1)
-