PeekPoke is a tool for reading and writing a Propeller's hub memory from a PC. It consists of two parts: a Python module for sending commands from the PC, and a Propeller program for responding to commands.
The Python module has methods to read and write hub memory as bytes, strings, integers, and lists of integers.
The Propeller program can be configured to restrict reads and writes to specific ranges, or to disable writes altogether.
PeekPoke has these additional features:
- the PAR register may be used to pass a value to the PC,
- the PC can set the baudrate remotely,
- the PC can reset the baudrate with a break condition,
- the Propeller can support baudrates as fast as 26 clocks per bit period,
- there is a four-byte identifier constant that can read by the PC,
- a four-byte token variable is 0 on launch and can be set by the PC,
- the PC can send PASM code to be executed (disabled by default),
- multiple instances of the Propeller program can run in separate cogs,
- the Propeller program is completely cog-contained after launch.
_xinfreq = 5_000_000
_clkmode = xtal1 + pll16x
cBuffSize = 20 'must be divisible by 4
peekpoke : "PeekPoke.spin"
long buffer[cBuffSize/4] 'buffer must be long-aligned since it is passed via PAR
from peekpoke import PeekPoke
# Assuming a PeekPoke instance is running on the serial port.
# ser_port is the name of the serial port (e.g. "COM1" or "/dev/cu.usbserial-XXXX")
p = PeekPoke(ser_port)
p.get_int(0, 4) # returns 80000000, if that is Spin's clkfreq
p.get_str(65297, 30) # returns 'Copyright 2005 Parallax, Inc.'
p.get_ints(0xe000, 2, 4) # returns [0, 50, 101, 151], from sine table
# Assuming the address of a write-safe buffer of 20 bytes was passed as PAR.
addr = p.get_par() # returns the PAR register
p.fill_bytes(addr, 20, b'-')
p.get_bytes(addr, 20) # returns bytearray(b'Cat-----------------')
p.set_str(addr, 20, 'Hello')
p.get_str(addr, 20) # returns 'Hello'
p.set_int(addr, 2, 2018)
p.get_int(addr, 2) # returns 2018
p.set_ints(addr, 4, [0, -1, 2000000000], signed=True)
p.get_ints(addr, 4, 3, signed=True) # returns [0, -1, 2000000000]
# The following may be necessary when reloading the Propeller.
from crow.host import Host
Host.close(ser_port) # closes the serial port
Host.open(ser_port) # re-opens the serial port
PeekPoke requires Python 3. It can be installed with the command "pip install peekpoke". If that doesn't work, try using "pip3".
Alternatively, the package may be downloaded from https://pypi.org/project/peekpoke/
. PeekPoke also requires the https://pypi.org/project/crow-serial/
packages (pip automatically handles these dependencies).
To run PeekPoke on the Propeller include "PeekPoke.spin" in your project, and use the Spin methods to set up and launch a PeekPoke instance. The latest version of "PeekPoke.spin" can be found at https://github.com/chris-siedell/PeekPoke
Python Documentation: https://github.com/chris-siedell/PeekPoke/wiki/PeekPoke-Python-Documentation/
Spin Documentation: https://github.com/chris-siedell/PeekPoke/wiki/PeekPoke-Spin-Documentation/
On PyPI: https://pypi.org/project/peekpoke/
On Github (has spin file): https://github.com/chris-siedell/PeekPoke