From e891f9f7f2fd79f6a1b9b6d85150bf03afce6539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Gimenez?= Date: Sat, 4 May 2024 20:55:15 +0200 Subject: [PATCH] Modified spi logic analyzer logic --- .../SPIProtocolAnalyzer/SPIAnalyzer.cs | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/Software/LogicAnalyzer/SPIProtocolAnalyzer/SPIAnalyzer.cs b/Software/LogicAnalyzer/SPIProtocolAnalyzer/SPIAnalyzer.cs index a2ff14e..d20ff6a 100644 --- a/Software/LogicAnalyzer/SPIProtocolAnalyzer/SPIAnalyzer.cs +++ b/Software/LogicAnalyzer/SPIProtocolAnalyzer/SPIAnalyzer.cs @@ -148,7 +148,7 @@ namespace SPIProtocolAnalyzer var clockRange = ckChannel.Samples.Skip(range.FirstSample).Take(range.Length).ToArray(); var dataRange = dataChannel.Samples.Skip(range.FirstSample).Take(range.Length).ToArray(); - int firstClockSample = FindFirstSampleClock(clockRange, cpol, cpha); + int firstClockSample = FindFirstSampleClock(0, clockRange, cpol, cpha); if (firstClockSample == -1) { @@ -169,12 +169,12 @@ namespace SPIProtocolAnalyzer ProtocolAnalyzerDataSegment segment = new ProtocolAnalyzerDataSegment { FirstSample = range.FirstSample + firstClockSample, LastSample = range.FirstSample + lastSample, Value = $"0x{value.ToString("X2")} '{asciival}'" }; segments.Add(segment); - firstClockSample = FindSample(lastSample, clockRange, cpha == 0 ? 1 : 0); + firstClockSample = FindFirstSampleClock(lastSample, clockRange, cpol, cpha); if (firstClockSample == -1) value = -1; else - value = GetByte(lastSample, clockRange, dataRange, shiftOrder, cpha, out lastSample); + value = GetByte(firstClockSample, clockRange, dataRange, shiftOrder, cpha, out lastSample); } } @@ -192,7 +192,9 @@ namespace SPIProtocolAnalyzer int currentSample = firstClockSample; - for (int buc = 0; buc < 8; buc++) + values[0] = dataRange[firstClockSample]; + + for (int buc = 1; buc < 8; buc++) { if (currentSample == -1) return -1; @@ -236,12 +238,14 @@ namespace SPIProtocolAnalyzer return value; } - private int FindFirstSampleClock(byte[] clockRange, int cpol, int cpha) + private int FindFirstSampleClock(int start, byte[] clockRange, int cpol, int cpha) { + int pos = start; + if (cpol == 0 && cpha == 0) { //Low-high - int pos = FindSample(0, clockRange, 0); + pos = FindSample(pos, clockRange, 0); if (pos == -1) return -1; @@ -252,7 +256,7 @@ namespace SPIProtocolAnalyzer else if (cpol == 0 && cpha == 1) { //Low-high-low - int pos = FindSample(0, clockRange, 0); + pos = FindSample(pos, clockRange, 0); if (pos == -1) return -1; @@ -266,8 +270,22 @@ namespace SPIProtocolAnalyzer } else if (cpol == 1 && cpha == 0) { - //High-low-high - int pos = FindSample(0, clockRange, 1); + //High-low + pos = FindSample(pos, clockRange, 1); + + if (pos == -1) + return -1; + + + return FindSample(pos, clockRange, 0); + + } + else if (cpol == 1 && cpha == 1) + { + //High-low-high-low + //High-log-high + + pos = FindSample(pos, clockRange, 1); if (pos == -1) return -1; @@ -278,26 +296,14 @@ namespace SPIProtocolAnalyzer return -1; return FindSample(pos, clockRange, 1); - } - else if (cpol == 1 && cpha == 1) - { - //High-low-high-low - int pos = FindSample(0, clockRange, 1); - - if (pos == -1) - return -1; - - pos = FindSample(pos, clockRange, 0); - - if (pos == -1) - return -1; + /* pos = FindSample(pos, clockRange, 1); if (pos == -1) return -1; - return FindSample(pos, clockRange, 0); + return FindSample(pos, clockRange, 0); */ } return -1;