mirror of
https://github.com/jonathanhogg/scopething
synced 2025-07-14 03:02:09 +01:00
Fix bug in calculating SampleAddress that was breaking mixed signal capture
This commit is contained in:
@ -5,4 +5,6 @@
|
|||||||
|
|
||||||
- Only tested against a BitScope Micro (BS05)
|
- Only tested against a BitScope Micro (BS05)
|
||||||
- Requires Python >3.6 and the **pyserial** package
|
- Requires Python >3.6 and the **pyserial** package
|
||||||
|
- Also requires **NumPy** and **SciPy** if you want to do analog range calibration
|
||||||
|
- Having **Pandas** is useful for wrapping capture results for further processing
|
||||||
|
|
||||||
|
13
scope.py
13
scope.py
@ -157,9 +157,10 @@ class Scope(vm.VirtualMachine):
|
|||||||
nsamples = int(round(period / ticks / self.capture_clock_period / clock_scale / len(analog_channels))) * len(analog_channels)
|
nsamples = int(round(period / ticks / self.capture_clock_period / clock_scale / len(analog_channels))) * len(analog_channels)
|
||||||
else:
|
else:
|
||||||
nsamples = int(round(period / ticks / self.capture_clock_period / clock_scale))
|
nsamples = int(round(period / ticks / self.capture_clock_period / clock_scale))
|
||||||
total_samples = nsamples*2 if logic_channels and analog_channels else nsamples
|
|
||||||
buffer_width = self.capture_buffer_size // capture_mode.sample_width
|
buffer_width = self.capture_buffer_size // capture_mode.sample_width
|
||||||
if total_samples > buffer_width:
|
if logic_channels and analog_channels:
|
||||||
|
buffer_width //= 2
|
||||||
|
if nsamples > buffer_width:
|
||||||
raise RuntimeError("Capture buffer too small for requested capture")
|
raise RuntimeError("Capture buffer too small for requested capture")
|
||||||
|
|
||||||
if raw:
|
if raw:
|
||||||
@ -234,15 +235,13 @@ class Scope(vm.VirtualMachine):
|
|||||||
start_timestamp += 1<<32
|
start_timestamp += 1<<32
|
||||||
timestamp += 1<<32
|
timestamp += 1<<32
|
||||||
address = int((await self.read_replies(1))[0], 16)
|
address = int((await self.read_replies(1))[0], 16)
|
||||||
if capture_mode.BufferMode in {vm.BufferMode.Chop, vm.BufferMode.Dual, vm.BufferMode.MacroChop}:
|
if capture_mode.BufferMode in {vm.BufferMode.Chop, vm.BufferMode.MacroChop, vm.BufferMode.ChopDual}:
|
||||||
address -= address % 2
|
address -= address % 2
|
||||||
elif capture_mode.BufferMode == vm.BufferMode.ChopDual:
|
|
||||||
address -= address % 4
|
|
||||||
traces = DotDict()
|
traces = DotDict()
|
||||||
for dump_channel, channel in enumerate(sorted(analog_channels)):
|
for dump_channel, channel in enumerate(sorted(analog_channels)):
|
||||||
asamples = nsamples // len(analog_channels)
|
asamples = nsamples // len(analog_channels)
|
||||||
async with self.transaction():
|
async with self.transaction():
|
||||||
await self.set_registers(SampleAddress=(address - total_samples) % buffer_width,
|
await self.set_registers(SampleAddress=(address - nsamples) % buffer_width,
|
||||||
DumpMode=vm.DumpMode.Native if capture_mode.sample_width == 2 else vm.DumpMode.Raw,
|
DumpMode=vm.DumpMode.Native if capture_mode.sample_width == 2 else vm.DumpMode.Raw,
|
||||||
DumpChan=dump_channel, DumpCount=asamples, DumpRepeat=1, DumpSend=1, DumpSkip=0)
|
DumpChan=dump_channel, DumpCount=asamples, DumpRepeat=1, DumpSend=1, DumpSkip=0)
|
||||||
await self.issue_program_spock_registers()
|
await self.issue_program_spock_registers()
|
||||||
@ -259,7 +258,7 @@ class Scope(vm.VirtualMachine):
|
|||||||
|
|
||||||
if logic_channels:
|
if logic_channels:
|
||||||
async with self.transaction():
|
async with self.transaction():
|
||||||
await self.set_registers(SampleAddress=(address - total_samples) % buffer_width,
|
await self.set_registers(SampleAddress=(address - nsamples) % buffer_width,
|
||||||
DumpMode=vm.DumpMode.Raw, DumpChan=128, DumpCount=nsamples, DumpRepeat=1, DumpSend=1, DumpSkip=0)
|
DumpMode=vm.DumpMode.Raw, DumpChan=128, DumpCount=nsamples, DumpRepeat=1, DumpSend=1, DumpSkip=0)
|
||||||
await self.issue_program_spock_registers()
|
await self.issue_program_spock_registers()
|
||||||
await self.issue_analog_dump_binary()
|
await self.issue_analog_dump_binary()
|
||||||
|
Reference in New Issue
Block a user