From 6743da3046aa825820277b7418a16691e3bffa51 Mon Sep 17 00:00:00 2001 From: 1a2m3 <65949266+1a2m3@users.noreply.github.com> Date: Tue, 28 Dec 2021 14:27:32 -0800 Subject: [PATCH 1/3] Update SpdReaderWriter.ino Improved reliability --- firmware/SpdReaderWriter.ino | 42 ++++++++++++++---------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/firmware/SpdReaderWriter.ino b/firmware/SpdReaderWriter.ino index a511fe2..3322e0e 100644 --- a/firmware/SpdReaderWriter.ino +++ b/firmware/SpdReaderWriter.ino @@ -16,7 +16,7 @@ #include #include "SpdReaderWriterSettings.h" // Settings -#define VERSION 20211208 // Version number (YYYYMMDD) +#define VERSION 20211228 // Version number (YYYYMMDD) // RSWP RAM support bitmasks #define DDR5 (1 << 5) // Offline mode control @@ -166,12 +166,6 @@ void setup() { // Perform initial device RSWP support test rswpSupport = rswpSupportTest(); - // Check saved i2c clock and set mode accordingly - if (getI2cClockMode()) { - i2cClock = 400000; - } - Wire.setClock(i2cClock); - // Reset EEPROM page address setPageAddress(0); @@ -181,6 +175,12 @@ void setup() { // Wait for serial port connection or initialization while (!PORT) {} + + // Check saved i2c clock and set mode accordingly + if (getI2cClockMode()) { + i2cClock = 400000; + } + Wire.setClock(i2cClock); // Send a welcome byte when the device is ready cmdTest(); @@ -382,7 +382,13 @@ void cmdRswpReport() { } void cmdRetestRswp() { + // Slow down I2C bus clock for accurate results + if (getI2cClockMode()) { + Wire.setClock(100000); + } PORT.write(rswpSupportTest()); + + Wire.setClock(getI2cClockMode() ? 400000 : 100000); } void cmdDdr4Detect() { @@ -733,12 +739,7 @@ byte rswpSupportTest() { if (!scanBus()) { // No I2C devices return ZERO; - } - - // Slow down I2C bus clock for accurate results - if (getI2cClockMode()) { - Wire.setClock(100000); - } + } // RSWP DDR5 test if (ddr5SetOfflineMode(ON)) { @@ -755,10 +756,7 @@ byte rswpSupportTest() { } } - resetPins(); - - // Restore I2C clock - setI2cClockMode(getI2cClockMode()); + resetPins(); return rswpSupport; } @@ -833,8 +831,6 @@ uint8_t getPageAddress(bool lowLevel = false) { return eepromPageAddress; } -//#ifdef __AVR__ - uint8_t status = ERROR; // Send start condition @@ -876,11 +872,6 @@ uint8_t getPageAddress(bool lowLevel = false) { case 0x48: return 1; default: return status; } - -//#endif - - // Non-AVR response - return ERROR; } // Sets page address to access lower or upper 256 bytes of DDR4 SPD @@ -974,8 +965,7 @@ bool saveSettings(byte name, byte value) { // Set I2C bus clock mode bool setI2cClockMode(bool mode) { saveSettings(CLOCKMODE, mode ? FASTMODE : STDMODE); - i2cClock = mode ? 400000 : 100000; - Wire.setClock(i2cClock); + Wire.setClock(mode ? 400000 : 100000); return getI2cClockMode() == mode; } From cd3826721cfe3f608a703619eb57206b6143dc1e Mon Sep 17 00:00:00 2001 From: 1a2m3 <65949266+1a2m3@users.noreply.github.com> Date: Tue, 28 Dec 2021 14:30:19 -0800 Subject: [PATCH 2/3] Improved connection reliability --- src/SpdReaderWriterDll/Device.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/SpdReaderWriterDll/Device.cs b/src/SpdReaderWriterDll/Device.cs index 80ed164..c00b889 100644 --- a/src/SpdReaderWriterDll/Device.cs +++ b/src/SpdReaderWriterDll/Device.cs @@ -630,7 +630,12 @@ private bool ConnectPrivate() { } if (!_isValid) { - throw new Exception("Invalid device"); + try { + DisposePrivate(); + } + finally { + throw new Exception("Invalid device"); + } } } catch (Exception ex) { @@ -951,7 +956,7 @@ private int GetFirmwareVersionPrivate() { if (IsConnected) { _version = Int32.Parse( Encoding.Default.GetString( - ExecuteCommand(new[] { GETVERSION }, (uint)Settings.MINVERSION.ToString().Length) + ExecuteCommand(new[] { GETVERSION }, 8) ) ); } From f022e098f0326a2861514f36a8ff02cb290bf4fe Mon Sep 17 00:00:00 2001 From: 1a2m3 <65949266+1a2m3@users.noreply.github.com> Date: Tue, 28 Dec 2021 14:30:57 -0800 Subject: [PATCH 3/3] Delete Settings.cs Not needed --- src/SpdReaderWriterDll/Settings.cs | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 src/SpdReaderWriterDll/Settings.cs diff --git a/src/SpdReaderWriterDll/Settings.cs b/src/SpdReaderWriterDll/Settings.cs deleted file mode 100644 index edbda8a..0000000 --- a/src/SpdReaderWriterDll/Settings.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace SpdReaderWriterDll { - /// - /// Application configuration - /// - public class Settings { - - /// - /// DLL version - /// - public const int DLLVERSION = 20211208; - - /// - /// Minimum device's firmware version required - /// - public static int MINVERSION = 20211208; - } -}