Logic 2.3.0

Introducing The Saleae Logic 2 Extension Marketplace!

Download Links

Breaking Changes

  • Small changes to the python measurement extension API Documentation
  • Sweeping changes to the python high level analyzer API, please update your HLAs now Documentation
  • Changes to the Serial, I2C analyzer outputs have changed and will break python HLAs Serial, I2C

What’s new

  • Added a marketplace for sharing custom python analyzers and measurements! :shopping:
  • Onboarding for new and existing users

Improvement

  • Make HLA errors selectable and keep only the latest per HLA
  • 5 more analyzers can now connect to Python high level analyzers! CAN, Manchester, Parallel, LIN, and LED Documentation
  • SPI analyzer output format has been expanded to include enable/disable events, affecting python HLAs Documentation

Bug fixes

  • Limit app zoom factor to positive values!
  • Don’t show new version notification when opening the about dialog
1 Like

I know that I have mentioned it a couple of times and you are working on an HLA to work with USB captures, I thought I would mention some of it again, as I am right now trying to debug why on a Teensy 4.1 running my latest WIP USBHost library code with Bluetooth support, why sometimes the PS4 works properly when it connects up to the Bluetooth Dongle and other times it does not… It also acts differently when I have Debug output from my library/sketch and when I don’t.

Thought I would mention this again with fresh comments as I am doing stuff.

Things like, I wish the analyzer could make a reasonable guess on if the data is in Low Speed or Full Speed.

So again I started the game of trying to capture using the USB protocol analyzer and then attempt to find the needles in the haystack of data.

The one capture I did was to start sketch, plug in BT dongle, then press the PS button on the Playstation and watch some data come out of it and display in debug terminal…

Saving the capture to disk is about 19mb, I know I don’t need all of it, but really hard to have any idea of where interesting data might be… Note: for most of my cases I have found that outputting to CSV with decode level of packets, has much of the needed data… In this case it generated about 1.9 million lines of text. Again a bit more than what I can easily search through.

From earlier comments up here, I mentioned, I could reduce most of this data down to something more manageable by using a linux grep to find all lines of types (IN, OUT, SETUP), and the line preceding it. In this case it reduced the data down to about 1.9K lines of text, which is nicer. Note Linux added in – type lines between which I edit out, and I use sublime text to combine the two lines of text into one… plus a few other edits to remove multiple commas, and in this case checksum and this reduced the set down to 6465 lines. Turns out the majority of these are the actual Joystick data So really the interesting data that I can use to help deduce all of this to what worked (or in case when it does not) to maybe 300 lines.

Which start off with lines in excel like:

|4.642738992|SETUP|0x00|0x02|0x80 0x06 0x00 0x01 0x00 0x00 0x08 0x00|
|4.8388148|IN|0x00|0x02|0x12 0x01 0x00 0x02 0xE0 0x01 0x01 0x40|
|4.838828264|OUT|0x00|0x02|0x0000|
|4.839820056|SETUP|0x00|0x02|0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00|
|4.843324544|IN|0x00|0x02|0x0000|
|4.84382012|SETUP|0x00|0x1D|0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00|
|4.84842584|IN|0x00|0x1D|0x12 0x01 0x00 0x02 0xE0 0x01 0x01 0x40 0x12 0x0A 0x01 0x00 0x91 0x88 0x00 0x02 0x00 0x01|
|4.84844604|OUT|0x00|0x1D|0x0000|
|4.848820208|SETUP|0x00|0x1D|0x80 0x06 0x00 0x03 0x00 0x00 0xFC 0x01|
|4.852926648|IN|0x00|0x1D|0x04 0x03 0x09 0x04|
|4.852937512|OUT|0x00|0x1D|0x0000|
|4.853820296|SETUP|0x00|0x1D|0x80 0x06 0x02 0x03 0x09 0x04 0xFC 0x01|
|4.85908396|IN|0x00|0x1D|0x18 0x03 0x43 0x00 0x53 0x00 0x52 0x00 0x38 0x00 0x35 0x00 0x31 0x00 0x30 0x00 0x20 0x00 0x41 0x00 0x31 0x00 0x30 0x00|
|4.85910812|OUT|0x00|0x1D|0x0000|
|4.859820408|SETUP|0x00|0x1D|0x80 0x06 0x00 0x02 0x00 0x00 0x09 0x00|
|4.86397368|IN|0x00|0x1D|0x09 0x02 0xB1 0x00 0x02 0x01 0x00 0xE0 0x32|
|4.86398784|OUT|0x00|0x1D|0x0000|
|4.864820496|SETUP|0x00|0x1D|0x80 0x06 0x00 0x02 0x00 0x00 0xB1 0x00|
|4.8689618|IN|0x00|0x1D|0x09 0x02 0xB1 0x00 0x02 0x01 0x00 0xE0 0x32 0x09 0x04 0x00 0x00 0x03 0xE0 0x01 0x01 0x00 0x07 0x05 0x81 0x03 0x10 0x00 0x01 0x07 0x05 0x02 0x02 0x40 0x00 0x01 0x07 0x05 0x82 0x02 0x40 0x00 0x01 0x09 0x04 0x01 0x00 0x02 0xE0 0x01 0x01 0x00 0x07 0x05 0x03 0x01 0x00 0x00 0x01 0x07 0x05 0x83 0x01 0x00 0x00 0x01 0x09 0x04|
|4.869012768|IN|0x00|0x1D|0x01 0x01 0x02 0xE0 0x01 0x01 0x00 0x07 0x05 0x03 0x01 0x09 0x00 0x01 0x07 0x05 0x83 0x01 0x09 0x00 0x01 0x09 0x04 0x01 0x02 0x02 0xE0 0x01 0x01 0x00 0x07 0x05 0x03 0x01 0x11 0x00 0x01 0x07 0x05 0x83 0x01 0x11 0x00 0x01 0x09 0x04 0x01 0x03 0x02 0xE0 0x01 0x01 0x00 0x07 0x05 0x03 0x01 0x19 0x00 0x01 0x07 0x05 0x83 0x01|
|4.8690636|IN|0x00|0x1D|0x19 0x00 0x01 0x09 0x04 0x01 0x04 0x02 0xE0 0x01 0x01 0x00 0x07 0x05 0x03 0x01 0x21 0x00 0x01 0x07 0x05 0x83 0x01 0x21 0x00 0x01 0x09 0x04 0x01 0x05 0x02 0xE0 0x01 0x01 0x00 0x07 0x05 0x03 0x01 0x31 0x00 0x01 0x07 0x05 0x83 0x01 0x31 0x00 0x01|
|4.869104536|OUT|0x00|0x1D|0x0000|
|4.869820576|SETUP|0x00|0x1D|0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00|
|4.873742944|IN|0x00|0x1D|0x0000|
|4.874820664|SETUP|0x00|0x1D|0x20 0x00 0x00 0x00 0x00 0x00 0x03 0x00|
|4.874842136|OUT|0x00|0x1D|0x03 0x0C 0x00|
|4.877272208|IN|0x00|0x1D|0x0000|
|4.990745|IN|0x01|0x0B|0x0E 0x04 0x01 0x03 0x0C 0x00|
|4.991745016|SETUP|0x00|0x1D|0x20 0x00 0x00 0x00 0x00 0x00 0x06 0x00|
|4.991766248|OUT|0x00|0x1D|0x24 0x0C 0x03 0x04 0x08 0x00|
|4.992107888|IN|0x00|0x1D|0x0000|
|4.992745136|IN|0x01|0x0B|0x0E 0x04 0x01 0x24 0x0C 0x00|
|4.993745152|SETUP|0x00|0x1D|0x20 0x00 0x00 0x00 0x00 0x00 0x03 0x00|
|4.993766352|OUT|0x00|0x1D|0x09 0x10 0x00|
|4.994094696|IN|0x00|0x1D|0x0000|
|4.994745072|IN|0x01|0x0B|0x0E 0x0A 0x01 0x09 0x10 0x00 0x13 0x71 0xDA 0x7D 0x1A 0x00|
|4.995745088|SETUP|0x00|0x1D|0x20 0x00 0x00 0x00 0x00 0x00 0x03 0x00|
|4.99576612|OUT|0x00|0x1D|0x01 0x10 0x00|
|4.996130832|IN|0x00|0x1D|0x0000|
|4.996745104|IN|0x01|0x0B|0x0E 0x0C 0x01 0x01 0x10 0x00 0x06 0xBB 0x22 0x06 0x0A 0x00 0xBB 0x22|

Which is an improvement over the 1.9 million lines, which I find impossible to search through. First the system does not want to search while it tries to index all of that data.

Again I am not sure how much of this can/should be done at the main USB analyzer code. That is some other method to be able to choose what data you are interested in and which you are not. That is I really wish you can somehow differentiate in the display those sections which show “interesting” data versus “non interesting” stuff like SYNC, Start of frames…

Again I am not sure how much of up to this point should be at the main protocol Analyzer and what should be HLA…

But the next level of stuff I can see that maybe should be HLA stuff is what I am probably going to need to go through next to see what is happening. Which is to translate the some of the above data into the higher level, example the line:

4.874842136 OUT 0x00 0x1D 0x03 0x0C 0x00

Is probably the: HCI_RESET
command.

Likewise:
4.99776636 OUT 0x00 0x1D 0x1A 0x0C 0x01 0x02

Is probably HCI_WRITE_SCAN_ENABLE

Likewise when we receive data back from a device like:

BT rx2_data(20): 48 20 10 0 c 0 1 0 3 0 8 0 40 0 70 0 1 0 2 0 

Actually this is debug output from sketch instead of showing the In from 0x02 type line above, but more importantly this actually translates to:

    L2CAP Connection Response: ID: 0, Dest:40, Source:70, Result:1, Status: 2
      Control Response

In particular it would be great if the analyzer understood some of the higher level USB standards like HCI and L2CAP.

But another feature that would be great (although not sure how doable it actually would be), is some form of difference of one capture to another. Again may be real difficult, but it would be great if somehow it could say this one is the differences of these two captures have these N HLA messages that are different…

Again sorry I know most of this is just reiterating stuff mentioned earlier.

Thanks Kurt! That is a ton of USB data. Could you send us that 19MB capture (or a similar one)?

We’ve noticed slow performance with the new HLA system, and once we add USB support, I’m curious to see benchmarks on a real world application like this one.

Porting the USB analyzer to the HLA system seems like it could be a huge benefit for you. We’re still working on it in our spare time, unfortunately it’s not high in priority on its own like some of our other analyzers. We did recently port CAN, LIN, Manchester, and a few other analyzers to support HLAs, but those were dramatically simpler and more commonly used than USB.

I wish we had it finished already! high level analyzers combined with the improvements we’re working on for the data table should help a lot!

In the meantime, good luck with the project!

Oh, it’s worth mentioning that I think the USB analyzer we have now should be limited to basic USB packet decoding, and decoding like HID, or even higher level layers like keyboard and mouse decoding should be done in HLAs written in python, then distributed through the marketplace.

When testing with SPI I found that sometimes for the final SPI frame in a capture, there won’t be a ‘Disable’ frame. The issue on Upvoty: link

Capture that shows this issue: SPI_Disable.sal (7.9 KB)

And a capture for a 2nd issue: SPI_Extra_Frames.sal (32.8 KB)

1 Like

Thanks,

I temporarily put a copy of the .sal file up on onedrive…
https://1drv.ms/u/s!Aj13xDWYbgPjibcsm8JKfumvnrhbTw?e=OngPm9

I truncated it slightly to remove a bunch of the retrieved data in this case.

Currently a couple of us are trying to figure out a different Bluetooth controller (XBox One).

What would be great is if, an HLA or the basic analyzer could output equivalent data like, some of the other tools. Like the one of the others trying to figure this device out captured the binding process to an Android phone using wireshark. An extract of that data looked something like:

No.	Time	Source	Destination	Protocol	Length	Info
209	21.090794	Microsof_db:a7:e9 (Xbox Wireless Controller)	localhost (SAMSUNG-SM-G900V)	L2CAP	17	Rcvd Connection Request (SDP, SCID: 0x0040)
0000   02 0c 20 0c 00 08 00 01   00 02 01 04 00 01 00 40
0010   00

0000   02 0c 20 10 00 0c 00 01   00 03 01 08 00 41 00 40   .. ..........A.@
0010   00 01 00 00 00                                    .....

211	21.091881	Microsof_db:a7:e9 (Xbox Wireless Controller)	localhost (SAMSUNG-SM-G900V)	L2CAP	21	Rcvd Information Response (Extended Features Mask, Success)
0000   02 0c 20 10 00 0c 00 01   00 0b 02 08 00 02 00 00   .. .............
0010   00 10 00 00 00                                    .....

212	21.092734	localhost (SAMSUNG-SM-G900V)	Microsof_db:a7:e9 (Xbox Wireless Controller)	L2CAP	21	Sent Connection Response - Success (SCID: 0x0040, DCID: 0x0041)
0000   02 0c 20 10 00 0c 00 01    00 03 01 08 00 41 00 40   .. ..........A.@
0010   00 00 00 00 00                                    .....


213	21.093100	controller	host	HCI_EVT	7	Rcvd Command Status (Read Remote Supported Features)
0000   04 0f 04 00 01 1b 04                              .......

214	21.093517	localhost (SAMSUNG-SM-G900V)	Microsof_db:a7:e9 (Xbox Wireless Controller)	L2CAP	21	Sent Configure Request (DCID: 0x0040)
0000   02 0c 20 10 00 0c 00 01     00 04 03 08 00 40 00 00
0010   00 01 02 a0 02


215	21.093906	host	controller	HCI_CMD	8	Sent Write Link Policy Settings
0000   01 0d 08 04 0c 00 05 00

216	21.094305	controller	host	HCI_EVT	14	Rcvd Read Remote Supported Features
0000   04 0b 0b 00 0c 00 bf 3e 8d fe db fd 7b 87


217	21.097590	controller	host	HCI_EVT	9	Rcvd Command Complete (Write Link Policy Settings)
0000   04 0e 06 01 0d 08 00 0c 00


218	21.098102	host	controller	HCI_CMD	8	Sent Write Link Supervision Timeout
0000   01 37 0c 04 0c 00 40 1f


219	21.098508	controller	host	HCI_EVT	8	Rcvd Number of Completed Packets
0000   04 13 05 01 0c 00 02 00


220	21.098927	Microsof_db:a7:e9 (Xbox Wireless Controller)	localhost (SAMSUNG-SM-G900V)	L2CAP	21	Rcvd Configure Request (DCID: 0x0041)
0000   02 0c 20 10 00 0c 00 01    00 04 02 08 00 41 00 00
0010   00 01 02 c8 05


221	21.099481	localhost (SAMSUNG-SM-G900V)	Microsof_db:a7:e9 (Xbox Wireless Controller)	L2CAP	19	Sent Configure Response - Success (SCID: 0x0040)
0000   02 0c 20 0e 00 0a 00 01     00 05 02 06 00 40 00 00
0010   00 00 00


222	21.099861	controller	host	HCI_EVT	8	Rcvd Number of Completed Packets
0000   04 13 05 01 0c 00 02 00


223	21.100263	controller	host	HCI_EVT	9	Rcvd Command Complete (Write Link Supervision Timeout)
0000   04 0e 06 01 37 0c 00 0c 00


224	21.100673	host	controller	HCI_CMD	6	Sent Authentication Requested
0000   01 11 04 02 0c 00


225	21.101116	Microsof_db:a7:e9 (Xbox Wireless Controller)	localhost (SAMSUNG-SM-G900V)	L2CAP	19	Rcvd Configure Response - Success (SCID: 0x0041)
0000   02 0c 20 0e 00 0a 00 01     00 05 03 06 00 41 00 00
0010   00 00 00

226	21.101589	controller	host	HCI_EVT	7	Rcvd Command Status (Authentication Requested)
0000   04 0f 04 00 01 11 04

Or maybe something like the data that you can capture, like the Beagle USB …
But again I totally understand that other protocols are probably a higher priority.

Thanks again,
Kurt

We’ll look into it. Thanks!