-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Samples for the decoder for STM8 series MCUs SWIM protocol.
Signed-off-by: Mike Jagdis <[email protected]> (github: mjagdis)
- Loading branch information
1 parent
44d6835
commit 8e05502
Showing
7 changed files
with
114 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
------------------------------------------------------------------------------- | ||
SWIM | ||
------------------------------------------------------------------------------- | ||
|
||
This is a capture of an ST-Link V2 programming an STM8 using the SWIM protocol. | ||
|
||
Details: | ||
https://www.st.com/content/ccc/resource/technical/document/user_manual/ca/89/41/4e/72/31/49/f4/CD00173911.pdf/files/CD00173911.pdf/jcr:content/translations/en.CD00173911.pdf | ||
|
||
|
||
Logic analyzer setup | ||
-------------------- | ||
|
||
The logic analyser used was a DreamSourceLab DSLogic (at 10MHz). | ||
|
||
Probe Target | ||
------------------ | ||
0 RST | ||
1 SWIM | ||
|
||
|
||
sample1.sr | ||
---------- | ||
|
||
Using stm8flash with an ST-Link V2 adapter to program an STM8S003F3. | ||
|
||
Command line: | ||
|
||
$ stm8flash -c stlinkv2 -p stm8s003f3 -s flash -w prog.ihx | ||
|
||
stm8flash is modified both for correctness and to generate the test sequences. | ||
The updated version can be found at https://github.com/mjagdis/stm8flash. | ||
|
||
A complete flash programming operation. SWIM is enabled and set to high | ||
speed mode (notice how the pulse width and period decreases after the | ||
initial chatter). A read of the affected memory region is made, compared to | ||
the data to be written and those blocks that contain differences are written | ||
back. Finally an SRST SWIM command is sent to terminate the conversation | ||
and reset the target. |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
------------------------------------------------------------------------------- | ||
SWIM | ||
------------------------------------------------------------------------------- | ||
|
||
These are captures of an ST-Link V2 programming an STM8 using the SWIM protocol. | ||
|
||
Details: | ||
https://www.st.com/content/ccc/resource/technical/document/user_manual/ca/89/41/4e/72/31/49/f4/CD00173911.pdf/files/CD00173911.pdf/jcr:content/translations/en.CD00173911.pdf | ||
|
||
|
||
Logic analyzer setup | ||
-------------------- | ||
|
||
The logic analyser used was a DreamSourceLab DSLogic (at 10MHz). | ||
|
||
Probe Target | ||
------------------ | ||
0 RST | ||
1 SWIM | ||
|
||
|
||
Data | ||
---- | ||
|
||
Using stm8flash with an ST-Link V2 adapter to program an STM8S003F3. | ||
|
||
Command line: | ||
|
||
$ stm8flash -c stlinkv2 -p stm8s003f3 -s opt -r /tmp/data; stm8flash -c \ | ||
stlinkv2 -p stm8s003f3 -s opt -r /tmp/data | ||
|
||
stm8flash is modified both for correctness and to generate the test sequences. | ||
The updated version can be found at https://github.com/mjagdis/stm8flash. | ||
|
||
|
||
tests/sample1.sr | ||
---------------- | ||
|
||
Read of two blocks of memory from an STM8S103 starting at the base address | ||
of the OPTs. Repeated twice with no SRST to disable SWIM in between. | ||
Note that the second enter sequence is not seen as an enter sequence. Since | ||
SWIM is already active on the target it does NOT recognise a second enter | ||
sequence and instead sees each low sent by the host as a SWIM reset request | ||
to which it responds, if you zoom in enough, with its own 16μs sync frame. | ||
|
||
|
||
tests/sample2.sr | ||
---------------- | ||
|
||
As sample1 but each of the runs ends with an SWIM reset followed by an SRST | ||
(system reset) SWIM command. Note that the SWIM reset consists of the host | ||
pulling the SWIM line low for 16μs to reset the target's SWIM module followed | ||
by the target acknowledging with its own synchronization frame (i.e. it pulls | ||
the line low for another 16μs). Note too that the RST bit is not set in | ||
SWIM_CSR so the SRST does not disable SWIM and the second enter sequence is | ||
treated as resyncing just as in sample1. | ||
|
||
|
||
tests/sample3.sr | ||
---------------- | ||
|
||
As sample2 but now we modify stm8flash to set RST (bit 2) in SWIM_CSR (0x7f80) | ||
as part of its shutdown. This causes the SRST to disable SWIM as well as reset | ||
the target and now the subsequent enter sequence behaves as expected. | ||
|
||
|
||
tests/sample4.sr | ||
---------------- | ||
|
||
As sample3 but the SRST at the end of each run is removed again. The second | ||
enter sequence is no longer recognised as an enter sequence and the target | ||
again responds to each low by with a sync frame indicating it is treating them | ||
as SWIM reset requests. This demonstrates that the SRST SWIM command is indeed | ||
responsible for disabling the SWIM module and that an external reset via the | ||
RST pin is insufficient regardless of the setting of the RST bit in SWIM_CSR. |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.