Giter Site home page Giter Site logo

pyswd's People

Contributors

pavelrevak avatar primeordinalsoup avatar schneidersoft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pyswd's Issues

ST-Link not detected

Hi Pavel,

I just installed swd and wrote a small program to start with. But it does not find my ST-Link V3 nor a STM32-Nucleo board. I found issue #15 which looked for all devices and copied that to my program, so I hav this now:

#!/usr/bin/env python3 
# coding: utf-8 

import sys
import swd
import usb


def main ():
    devices = []
    # dev = usb.core.find(idVendor = 0x0483, idProduct = 0x374B, iProduct = 0x5, find_all = True)
    dev = usb.core.find(find_all = True)
    for device in dev:
        devices.append (device)
        print (hex(device.idVendor), hex(device.idProduct), device.serial_number)
        
    STLink = swd.Swd (swd_frequency=4000000, serial_no='')
    print (STLink)


if __name__ == '__main__':
    sys.exit(main())    

it produces this output:

0x4f2 0xb613 None
0x4f2 0xb604 0001
Traceback (most recent call last):
  File "E:\Projects\Software\Python\PySWD_Test\source\PySWD_Test.py", line 22, in <module>
    sys.exit(main())
  File "E:\Projects\Software\Python\PySWD_Test\source\PySWD_Test.py", line 17, in main
    STLink = swd.Swd (swd_frequency=4000000, serial_no='')
  File "C:\Users\Martin\AppData\Roaming\Python\Python310\site-packages\swd\swd.py", line 15, in __init__
    driver = _Stlink(
  File "C:\Users\Martin\AppData\Roaming\Python\Python310\site-packages\swd\stlink\__init__.py", line 114, in __init__
    usb = _usb.StlinkUsb(serial_no, debug=debug)
  File "C:\Users\Martin\AppData\Roaming\Python\Python310\site-packages\swd\stlink\usb.py", line 222, in __init__
    raise NoDeviceFoundException()
swd.stlink.usb.NoDeviceFoundException

With the upper dev = ... line nothing is found
I changed idProduct to 0x374B (instead of 0x374F as in issue #15), because I found this value in Windows device manager.
I'm running Python 3.10 under Win 10
(also swd.Swd () does not accept a keyword argument 'logger': error message is :TypeError: Swd.init() got an unexpected keyword argument 'logger')

Thanks for any help
Martin

Cannot get target voltage

When no target is connected it is not possible to get the target voltage.

example:

	print(swd.Swd().get_target_voltage())

Gives:

swd.stlink.StlinkException: Get IDCODE error

When debugging connection issues it is good to be able to determine if the target is powered. This is also a first indication for if the connector or adapter is connected properly.

Error when loading large data

When trying to load write_mem a very large piece of data

.local/lib/python3.7/site-packages/swd/swd.py", line 180, in write_mem
    del chunk[:chunk_size32]
TypeError: 'bytes' object does not support item deletion

swd.stlink broken

Getting a "module 'swd' has no attribute 'stlink'" error

Downgrading to commit d8f25cd (before the stlink driver was split into a sub-module) resolves the error.

Command failure on certain versions

I have noticed that some stlinkv2 versions do not work as expected
I use the following python code:

import swd

dev = swd.Swd()
print(dev.get_version().str)
print(dev.get_target_voltage())
print(dev.get_idcode())

cm = swd.CortexM(dev)

cm.halt()
cm.reset()
cm.run()

print(cm.get_reg('PC'))

And get the following output:

$ python3 swdtest.py 
ST-Link/V2 V2J38S7
3.23
463475831
Traceback (most recent call last):
  File "swdtest.py", line 14, in <module>
    print(cm.get_reg('PC'))
  File "/usr/local/lib/python3.8/dist-packages/swd/cortexm.py", line 61, in get_reg
    return self._swd.get_reg(CortexM._get_reg_index(reg))
  File "/usr/local/lib/python3.8/dist-packages/swd/swd.py", line 58, in get_reg
    return self._drv.get_reg(register)
  File "/usr/local/lib/python3.8/dist-packages/swd/stlink/__init__.py", line 251, in get_reg
    _check_status(status)
  File "/usr/local/lib/python3.8/dist-packages/swd/stlink/__init__.py", line 56, in _check_status
    raise StlinkException(_com.StlinkCom.STATUS.MESSAGES[status])
swd.stlink.StlinkException: Command error

With a different stlinkv2

$ python3 swdtest.py 
ST-Link/V2 V2J33S7
3.23
463475831
0

Update Pypi Version

Hello,

the Pipy version is still stuck at version 1.0.0 which was released 2 years ago.

Create another release to make available the bug fixes in usb.py as they are quite necessary.

Thanks.

Usage of read_mem and write_mem

I wonder if read_mem and write_mem with the suffixes 8, 16, 32 all use and store data in bytes.
So what memory view do I get for write_mem32 (0x20000000, [1, 2, 3, 4])?
01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 = interpreting data as 32 bit values?
01 02 03 04 00 00 00 00 00 00 00 00 00 00 00 00 = interpreting data as 8 bit values but write them in 32 bit accesses?
The same reverse for read_memX
It seems, that data is always in bytes (??) Is there a way to get 32bit data in and out or must I do the processing on my own?

Disconnect

Is there a way to disconnect the Swd interface?

No backend available

Hello, How to install properly?
I run under Windows.
I've installed packages pyswd 1.0.0 and pyusb 1.1.1 by just "pip install pyswd" command. When I run python and after import swd package, firstly I try to initialize by "dev = swd.Swd()" I get error "No backend available".

Please help me.

Can't write data to flash

Dose it can't support write data to flash memery? When I write data to flash,like write address 0x08000000 in stm32f103cb,it can not work!

Cannot find ST Link

Using the PyUSB I was able to find the ST link however having issues with the pyswd.
image
image

set jtag speed issue

firstly thanks what a splendid piece of tidy python!

i found that it was not setting the jtag speed as expected because the hash is unordered. i made a fix, do you want a pull request for it?

Operation timed out

Hi, I'm getting an error while using the read_mem() function

I think the error happens when using read_mem() with a (size > 4) and (size % 4 != 0)

ST-Link version: ST-Link/V2-1 V2J28M18

Code to reproduce

import swd
import time

dev = swd.Swd()

while True:
    print('reading')
    data = list(dev.read_mem(0x20000000, 5))
    print(data)
    time.sleep(1)

First read is successful but Exception is thrown at second read. ST-Link needs to be unpluged and repluged to make it work again.

Traceback

Traceback (most recent call last):
  File "swd\stlinkcom.py", line 77, in write
    count = self._dev.write(self.PIPE_OUT, data, tout)
  File "Python\Python36-32\lib\site-packages\usb\core.py", line 948, in write
    self.__get_timeout(timeout)
  File "Python\Python36-32\lib\site-packages\usb\backend\libusb1.py", line 824, in bulk_write
    timeout)
  File "Python\Python36-32\lib\site-packages\usb\backend\libusb1.py", line 920, in __write
    _check(retval)
  File "Python\Python36-32\lib\site-packages\usb\backend\libusb1.py", line 595, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 10060] Operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    data = list(dev.read_mem(0x20000000, 5))
  File "swd\swd.py", line 147, in read_mem
    yield from self._drv.read_mem8(address, chunk_size)
  File "swd\_log.py", line 29, in wrapper
    ret = func(*args, **kwargs)
  File "swd\stlink.py", line 370, in read_mem8
    return self._com.xfer(cmd, rx_length=size)
  File "swd\_log.py", line 29, in wrapper
    ret = func(*args, **kwargs)
  File "swd\stlinkcom.py", line 185, in xfer
    self._dev.write(command, tout)
  File "swd\_log.py", line 29, in wrapper
    ret = func(*args, **kwargs)
  File "swd\stlinkcom.py", line 80, in write
    raise StlinkComException("USB Error: %s" % err)
swd.stlinkcom.StlinkComException: USB Error: [Errno 10060] Operation timed out

Slow to connect

I do not know if this is normal but it takes more than 10 seconds to connect for me.

import time
import libusb_package
import usb.core
import usb.backend.libusb1
libusb1_backend = usb.backend.libusb1.get_backend(find_library=libusb_package.find_library)

import swd

x = time.time()
dev = swd.Swd()
y = time.time()
print('CONNECTED in {} seconds'.format(y-x))
# py -3 swdspeedtest.py
CONNECTED in 12.987221956253052 seconds

I would like to get connection speed closer to 2 seconds or less.
Perhaps it is related to libusb not pyswd? Any suggestions?

IDCODE confusing

CortexM(sdw.Swd()).get_idcode() gets the Stlinks IDCODE(or some other value from it) rather than the target IDCODE.
To get the target IDCODE you must use:
sdw.Swd().get_mem32(0xE0042000)

Consider changing the function name?

example get_idcode() = 2BA01477 (corresponding to Cortex ®-M4 with FPU r0p1) STM32F446xx
example swd.get_mem32(0xE0042000) = 10006430 (F103 XL REV.A)

Will pyswd run on Raspberry Pi?

Hi Pavel,
well, the question is in the title. If yes, then some instructions on installing would be appreciated.
Thanks a lot.
Martin

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.