Skip to content

Commit 3f3b3a7

Browse files
committed
Add notes for V2.1.0 release
1 parent cdc9566 commit 3f3b3a7

File tree

4 files changed

+51
-30
lines changed

4 files changed

+51
-30
lines changed

CHANGES.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
1-
Version 2.1.0 in Progress
1+
30th June 2023 (Version 2.1.0)
22

3+
* Support for host side and device side timestamping in orbtop
34
* Stability improvements
45
* Move to ninja/meson build system
6+
* Cleaner stream abstraction for data sourcing
7+
* Improved orbtop interval monotonicity
8+
* Improved shutdown and error handling for orbuculum mux
9+
* Suite and connected probe version reporting
10+
* UART configuration in orbtrace for ORBTrace Mini
11+
* Move to separate library to support third party tooling
12+
* Better max interrupt depth tracking under overload conditions
13+
* Automated udev and gdb init files installation in Linux builds
514
* Changes to usb transfer arrangments for improved performance
615
* Orbtop gains wall time and interrupt utilisation percentage
716
* Support for SWO over UART speed setting on ORBTRrace
817
* Improved OSX support
9-
* Improved windows support
18+
* Much improved windows support
1019
* Python support
1120
* Addition of orblcd utility for host-side emulation of lcd panels.
1221

README.md

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
![Screenshot](https://raw.githubusercontent.com/orbcode/orbuculum/main/Docs/title.png)
88

9-
This (main) is the development branch for V2.1.0. This includes nice things like Python support and the ninja/meson build system. Development is generally done in feature branches and folded into main as those features mature.
9+
This (main) is the development branch for V2.2.0 but, at the moment, it doesn't contain anything juicy beyond 2.1.0. Development is generally done in feature branches and folded into main as those features mature.
10+
11+
Version 2.1.0 has recently been released and includes nice things like Python support, a decent quality Windows port and the ninja/meson build system. It also supports the full functionality of the ORBTrace Mini dongle.
1012

1113
ORBTrace, the FPGA based trace interface dongle, has now been moved into its own separate repository as it's grown considerably and really needs its own identity. History for ORBtrace until the split point is maintained here for provenance purposes, but new work is now done over in the new location.
1214

@@ -62,7 +64,7 @@ is a very powerful code performance analysis tool.
6264

6365
* orblcd: LCD emulator on the host computer.
6466

65-
There is also embryonic Python support in the `Python` directory.
67+
There is also Python support in the `Python` directory.
6668

6769
A few simple use cases are documented in the last section of this
6870
document, as are example outputs of using orbtop to report on the
@@ -73,7 +75,10 @@ either using NRZ (UART) or RZ (Manchester) formats. The pin is a
7375
dedicated one that would be used for TDO when the debug interface is
7476
in JTAG mode. We've demonstrated
7577
ITM feeds of around 4.3MBytes/sec on a STM32F427 via SWO with Manchester
76-
encoding running at 48Mbps. SWO with UART encoding is good for 62Mbaud.
78+
encoding running at 48Mbps. SWO with UART encoding is good for 62Mbaud. The encoding of UART
79+
is less efficient than Manchester so those speeds come out largely the same. Users are advised
80+
to use Manchester encoding if their probe supports it because the don't have to stress about
81+
data speeds (it's autobauding), clock changes or start/stop bits.
7782

7883
The data flowing from the TRACE pins is clocked using a separate TRACECLK pin. There can
7984
be 1-4 TRACE pins which obviously give you much higher bandwidth than the single SWO. Using ORBTrace
@@ -101,7 +106,8 @@ from the target;
101106
* ORBTrace Mini
102107

103108
Note that current support for the ECPIX-5 breakout board is based on the original bob, the designs for which
104-
are in the orbtrace_hw repository. bob2 support will be added over the next few weeks (written on 1 Nov 2022).
109+
are in the orbtrace_hw repository. bob2 support will be added when we get around to it (probably when we decide we
110+
need USB3 support...unlikely to be yet a while).
105111

106112
For 'normal' users we highly reccomend the ORBTrace mini probe for the best experience using this stuff. That's
107113
not particularlly to make money (the designs are in the orbtrace_hw directory...feel free to build you own), but
@@ -110,7 +116,7 @@ because that hardware has been tuned for the job to be done.
110116
gdb setup files for each device type can be found in the `Support` directory. You'll find
111117
example get-you-going applications in the [Orbmule](https://github.com/orbcode/orbmule) repository including
112118
`gdbinit` scripts for OpenOCD, pyOCD and Blackmagic Probe Hosted. There are walkthroughs for lots of examples
113-
of the use of the orbuculum suite at (Orbcode)[https://orbcode.org].
119+
of the use of the orbuculum suite at [Orbcode](https://orbcode.org).
114120

115121
When using SWO Orbuculum can use, or bypass, the TPIU. The TPIU adds overhead
116122
to the datastream, but provides better synchronisation if there is corruption
@@ -140,14 +146,14 @@ you are using. ORBTrace Mini can operate with UART encoded SWO at up to 62MBits/
140146
also supports Manchester encoded SWO at up
141147
to 48Mbps. The advantage of Manch encoding is that there's no speed matching needed to use it, and it should
142148
continue to work correctly even if the target clock speed changes (e.g. when it goes
143-
into a low power mode). This is a good thing, and is the way we normally use SWO.
149+
into a low power mode). This is a good thing, and is the way we normally use SWO for day-job.
144150

145151
Configuring the Target
146152
======================
147153

148154
Generally speaking, you will need to configure the target device to output
149155
SWD or parallel data. You can either do that through program code, or through magic
150-
incantations in gdb. The gdb approach flexible but a bit clunky. @novakov has created
156+
incantations in gdb. The gdb approach is flexible but a bit clunky. @novakov has created
151157
the libtrace repository which includes all the code needed to configure your target
152158
directly via progam code if you prefer to set things up that way.
153159

@@ -296,6 +302,8 @@ Dependencies
296302

297303
In MSys2/MinGW-w64 run command: `pacman -S mingw-w64-x86_64-meson mingw-w64-x86_64-SDL2 ninja mingw-w64-x86_64-libusb mingw-w64-x86_64-toolchain mingw-w64-x86_64-zeromq git` to install all required dependencies.
298304

305+
Note that at the moment the Windows build is using a forked libusb because of constraints in the upstream build opening multiple interfaces on the same device at the same time. Hopefully that situation is only temporary.
306+
299307
Build
300308
-----
301309

@@ -313,33 +321,34 @@ In order to get single folder with Orbuculum and MinGW dependencies run:
313321
>meson install -C ./build --destdir ./install --strip
314322
```
315323

316-
`--prefix A:/` is required to workaround how Meson constructs install directory. Without it deeply nested path will be generated instead of clean `build/install`.
324+
`--prefix A:/` is required to workaround how Meson constructs the install directory. Without it a deeply nested path will be generated instead of the clean `build/install`.
317325

318326
Orbuculum executables along with MinGW-w64 dependencies will be installed into `build/install` and can be transfered to different machine or used outside of MSys2 shell.
319327

320328
Using
321329
=====
322330

323331
The command line options for Orbuculum are available by running
324-
orbuculum with the -h option. Orbuculum is just the multiplexer, the
325-
fifos are now provided by `orbfifo`. *This is a change to the previous
326-
way the suite was configured where the fifos were integrated into `orbuculum` itself*. Note that
327-
orbfifo isn't available on Windows (there are no fifos), so use orbzmq to get similar functionality
328-
on that platform.
332+
orbuculum with the -h option.
329333

330334
Simply start orbuculum with the correct options for your trace probe and
331335
then you can start of stop other utilities as you wish. A typical command
332336
to run orbuculum would be;
333337

334-
```$ orbuculum --monitor 100```
338+
```$ orbuculum --monitor 1000```
335339

336340
In this case, because no source options were provided on the command line, input
337341
will be taken from a Blackmagic probe USB SWO feed, or from an ORBTrace mini if it can find one.
338-
It will start the daemon with a monitor reporting interval of 100mS. Orbuculum exposes TCP port 3443 to which
342+
It will start the daemon with a monitor reporting interval of 100ms. Orbuculum exposes TCP port 3443 to which
339343
network clients can connect. This port delivers raw TPIU frames to any
340344
client that is connected (such as orbcat, orbfifo or orbtop).
341345
The practical limit to the number of clients that can connect is set by the speed of the host machine....but there's
342-
nothing stopping you using another one on the local network :-)
346+
nothing stopping you using another one on the local network :-) If you've got an orbtrace mini and you want
347+
to switch on power to your target and configure it for Manchester SWO, a suitable command would be;
348+
349+
```$ orbuculum --monitor 1000 --orbtrace '-p vtref,3.3 -e vtref,on'```
350+
351+
...this will re-initialise the probe if it gets disconnected at any time.
343352

344353
Information about command line options can be found with the -h
345354
option. Orbuculum itself is specifically designed to be 'hardy' to probe and
@@ -365,7 +374,7 @@ For `orbuculum`, the specific command line options of note are;
365374

366375
`-H, --hires`: Use high resolution time. This limits probe interface timeouts to 1ms, which makes host-side timing more accurate, but at the expense of _much_ higher load (literally perhaps x100). Use sparingly.
367376

368-
`-m, --monitor`: Monitor interval (in mS) for reporting on state of the link. If baudrate is specified (using `-a`) and is greater than 100bps then the percentage link occupancy is also reported.
377+
`-m, --monitor`: Monitor interval (in ms) for reporting on state of the link. If baudrate is specified (using `-a`) and is greater than 100bps then the percentage link occupancy is also reported.
369378

370379
`-n, --serial-number`: Set a specific serial number for the ORBTrace or BMP device to connect to. Any unambigious sequence is sufficient. Ignored for other probe types.
371380

@@ -383,7 +392,7 @@ For `orbuculum`, the specific command line options of note are;
383392
Orbfifo
384393
-------
385394

386-
**Note:** `orbfifo` is not supported on Windows.
395+
**Note:** `orbfifo` is not supported on Windows. Use `orbzmq` instead.
387396

388397
The easiest way to use the output from orbuculum is with one of the utilities
389398
such as `orbfifo`. This creates a set of fifos or permanent files in a given
@@ -590,7 +599,8 @@ options for orbcat are;
590599

591600
`-c, --channel [Number],[Format]`: of channel to populate (repeat per channel) using printf
592601
formatting. Note that the `Name` component is missing in this format because
593-
orbcat does not create fifos.
602+
orbcat does not create fifos. **beware not to have any extraneous spaces in this option,
603+
that generally ends up not doing what you want as its interpreted as a new option.**
594604

595605
`-C, --cpufreq [Frequency in KHz]`: Set (scaled) speed of the CPU to convert CPU timestamps into time timestamps. When
596606
this option is set `-Ts` and `-Tt` will generate output in milliseconds and thousandths of a millisecond
@@ -623,6 +633,8 @@ options for orbcat are;
623633
`-v, --verbose [x]`: Verbose mode level 0..3.
624634

625635
`-w, --window [string]`: Title for on-screen window.
636+
637+
626638
Orbtop
627639
------
628640

@@ -663,7 +675,7 @@ Command line options for orbtop are;
663675

664676
`-h, --help`: Brief help.
665677

666-
`-I, --interval [Interval]`: Set integration and display interval in milliseconds (defaults to 1000 mS)
678+
`-I, --interval [Interval]`: Set integration and display interval in milliseconds (defaults to 1000 ms)
667679

668680
`-j, --json-file [filename]`: Output to file in JSON format (or screen if <filename> is '-')
669681

@@ -710,7 +722,7 @@ and what the spread is of those. Here's a typical combination output for a simpl
710722
15 | 100 | 1 | 10208 | 102 | 100 | 210
711723
53 | 210 | 1 | 44752 | 213 | 97 | 479
712724
713-
[V-TH] Interval = 1002mS / 7966664 (~7950 Ticks/mS)
725+
[V-TH] Interval = 1002ms / 7966664 (~7950 Ticks/ms)
714726
```
715727

716728
The top half of this display is the typical 'top' output, the bottom half is a table of
@@ -731,7 +743,7 @@ The command line options of note are;
731743

732744
`-b, --buffer-len [Length]`: Set length of post-mortem buffer, in KBytes (Default 32 KBytes)
733745

734-
`-c, --editor-cmd [command]`: Set command line for external editor (0.000000 = filename, % = line). A few examples are;
746+
`-c, --editor-cmd [command]`: Set command line for external editor ( %%f = filename, %%l = line). A few examples are;
735747

736748
* emacs; `-c emacs "+%l %f"`
737749
* codium/VSCode; `-c codium -g "%f:%l"`

Src/orbtop.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -738,11 +738,11 @@ static void _outputTop( uint32_t total, uint32_t reportLines, struct reportLine
738738
( _r.HWPkt != ITMDecoderGetStats( &_r.i )->HWPkt ) ? C_HW_IND "H" : C_RESET "-" );
739739

740740
if ( ( _r.lastReportTicks ) && ( lastTime != _r.lastReportus ) )
741-
genericsPrintf( "Interval = " C_DATA "%" PRIu64 "mS " C_RESET "/ "C_DATA "%" PRIu64 C_RESET " (~" C_DATA "%" PRIu64 C_RESET " Ticks/mS)" EOL,
741+
genericsPrintf( "Interval = " C_DATA "%" PRIu64 "ms " C_RESET "/ "C_DATA "%" PRIu64 C_RESET " (~" C_DATA "%" PRIu64 C_RESET " Ticks/ms)" EOL,
742742
( ( lastTime - _r.lastReportus ) + 500 ) / 1000, _r.timeStamp - _r.lastReportTicks, ( ( _r.timeStamp - _r.lastReportTicks ) * 1000 ) / ( lastTime - _r.lastReportus ) );
743743
else
744744
{
745-
genericsPrintf( C_RESET "Interval = " C_DATA "%" PRIu64 C_RESET "mS" EOL, ( ( lastTime - _r.lastReportus ) + 500 ) / 1000 );
745+
genericsPrintf( C_RESET "Interval = " C_DATA "%" PRIu64 C_RESET "ms" EOL, ( ( lastTime - _r.lastReportus ) + 500 ) / 1000 );
746746
}
747747

748748
genericsReport( V_INFO, " Ovf=%3d ITMSync=%3d TPIUSync=%3d ITMErrors=%3d" EOL,
@@ -1185,7 +1185,7 @@ bool _processOptions( int argc, char *argv[] )
11851185
genericsReport( V_INFO, "Elf File : %s" EOL, options.elffile );
11861186
genericsReport( V_INFO, "ForceSync : %s" EOL, options.forceITMSync ? "true" : "false" );
11871187
genericsReport( V_INFO, "C++ Demangle : %s" EOL, options.demangle ? "true" : "false" );
1188-
genericsReport( V_INFO, "Display Interval : %d mS" EOL, options.displayInterval / 1000 );
1188+
genericsReport( V_INFO, "Display Interval : %d ms" EOL, options.displayInterval / 1000 );
11891189
genericsReport( V_INFO, "Log File : %s" EOL, options.logfile ? options.logfile : "None" );
11901190
genericsReport( V_INFO, "Objdump options : %s" EOL, options.odoptions ? options.odoptions : "None" );
11911191

Support/gdbtrace.init

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ GDB SWO Trace Configuration Helpers
99
Setup Device
1010
------------
1111
STM32;
12-
enableSTM32SWO : Enable SWO on STM32 pins (for STM32F4 if 4 is passed as first argument)
12+
enableSTM32SWO : Enable SWO on STM32 pins (for F4 or F7 if 4/7 is passed as first argument)
1313
enableSTM32TRACE: Start TRACE on STM32 pins
1414

1515
IMXRT;
@@ -346,8 +346,8 @@ define enableSTM32SWO
346346

347347
set $CPU=$CPU_STM32
348348
_setAddressesSTM32
349-
if ($tgt==4)
350-
# STM32F4 variant.
349+
if (($tgt==4) || ($tgt==7))
350+
# STM32F4/7 variant.
351351
# Enable AHB1ENR
352352
set *0x40023830 |= 0x02
353353
# Set MODER for PB3

0 commit comments

Comments
 (0)