Test program running on MAX32625MBED. Control through USB Serial commands using a terminal emulator such as teraterm or putty.

Dependencies:   MaximTinyTester CmdLine MAX541 USBDevice

Revision:
63:8f39d21d6157
Parent:
62:8223a7253c90
Child:
64:a667cfd83492
--- a/MAX11043/MAX11043.cpp	Tue Feb 18 06:30:34 2020 +0000
+++ b/MAX11043/MAX11043.cpp	Tue Feb 18 09:25:29 2020 +0000
@@ -211,273 +211,6 @@
     m_cs_pin = m_SPI_cs_state;
 }
 
-// CODE GENERATOR: extern function requirement MAX11043::SPIwrite16bits
-// SPI write 16 bits
-// SPI interface to MAX11043 shift 16 bits mosiData into MAX11043 DIN
-//
-void MAX11043::SPIwrite16bits(int16_t mosiData16)
-{
-    // CODE GENERATOR: extern function definition for function SPIwrite16bits
-    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIwrite16bits(int16_t mosiData16)
-    size_t byteCount = 2;
-    static char mosiData[2];
-    static char misoData[2];
-    mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte
-    mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ noInterrupts();
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
-    //
-    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
-    //~ m_spi.transfer(mosiData8_FF0000);
-    //~ m_spi.transfer(mosiData16_00FF00);
-    //~ m_spi.transfer(mosiData16_0000FF);
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ interrupts();
-    // Optional Diagnostic function to print SPI transactions
-    if (onSPIprint)
-    {
-        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
-    }
-    //
-    // VERIFY: SPIwrite24bits print diagnostic information
-    //cmdLine.serial().printf(" MOSI->"));
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
-    // hex dump mosiData[0..byteCount-1]
-#if 0 // HAS_MICROUSBSERIAL
-    cmdLine_microUSBserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_microUSBserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_microUSBserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_microUSBserial.serial().printf(" ");
-#endif
-#if 0 // HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" ");
-#endif
-    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
-    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
-    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
-    //
-    // int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
-    // return misoData16;
-}
-
-// CODE GENERATOR: extern function requirement MAX11043::SPIreadWrite16bits
-// SPI read and write 16 bits
-// SPI interface to MAX11043 shift 16 bits mosiData16 into MAX11043 DIN
-// while simultaneously capturing 16 bits miso data from MAX11043 DOUT
-//
-int16_t MAX11043::SPIreadWrite16bits(int16_t mosiData16)
-{
-    // CODE GENERATOR: extern function definition for function SPIreadWrite16bits
-    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite16bits(int16_t mosiData16)
-    size_t byteCount = 2;
-    static char mosiData[2];
-    static char misoData[2];
-    mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte
-    mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ noInterrupts();
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
-    //
-    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
-    //~ m_spi.transfer(mosiData8_FF0000);
-    //~ m_spi.transfer(mosiData16_00FF00);
-    //~ m_spi.transfer(mosiData16_0000FF);
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ interrupts();
-    // Optional Diagnostic function to print SPI transactions
-    if (onSPIprint)
-    {
-        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
-    }
-    //
-    // VERIFY: SPIwrite24bits print diagnostic information
-    //cmdLine.serial().printf(" MOSI->"));
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
-    // hex dump mosiData[0..byteCount-1]
-#if 0 // HAS_MICROUSBSERIAL
-    cmdLine_microUSBserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_microUSBserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_microUSBserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_microUSBserial.serial().printf(" ");
-#endif
-#if 0 // HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" ");
-#endif
-    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
-    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
-    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
-    //
-    //int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF;
-    int misoData16 = (misoData[0] << 8) | misoData[1];
-    return misoData16;
-}
-
-// CODE GENERATOR: extern function requirement MAX11043::SPIreadWrite32bits
-// SPI read and write 32 bits
-// SPI interface to MAX11043 shift 32 bits mosiData into MAX11043 DIN
-// while simultaneously capturing 32 bits miso data from MAX11043 DOUT
-//
-int32_t MAX11043::SPIreadWrite32bits(int32_t mosiData32)
-{
-    // CODE GENERATOR: extern function definition for function SPIreadWrite32bits
-    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite32bits(int32_t mosiData32)
-    size_t byteCount = 4;
-    static char mosiData[4];
-    static char misoData[4];
-    mosiData[0] = (char)((mosiData32 >> 24) & 0xFF); // MSByte
-    mosiData[1] = (char)((mosiData32 >> 16) & 0xFF);
-    mosiData[2] = (char)((mosiData32 >>  8) & 0xFF);
-    mosiData[3] = (char)((mosiData32 >>  0) & 0xFF); // LSByte
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ noInterrupts();
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin
-    //
-    unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount);
-    //~ m_spi.transfer(mosiData8_FF0000);
-    //~ m_spi.transfer(mosiData16_00FF00);
-    //~ m_spi.transfer(mosiData16_0000FF);
-    //
-    //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin
-    //
-    // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts()
-    //~ interrupts();
-    // Optional Diagnostic function to print SPI transactions
-    if (onSPIprint)
-    {
-        onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData);
-    }
-    //
-    // VERIFY: SPIwrite24bits print diagnostic information
-    //cmdLine.serial().printf(" MOSI->"));
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData8_FF0000 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_00FF00 & 0xFF), HEX);
-    //cmdLine.serial().printf(" 0x"));
-    //Serial.print( (mosiData16_0000FF & 0xFF), HEX);
-    // hex dump mosiData[0..byteCount-1]
-#if 0 // HAS_MICROUSBSERIAL
-    cmdLine_microUSBserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_microUSBserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_microUSBserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_microUSBserial.serial().printf(" ");
-#endif
-#if 0 // HAS_DAPLINK_SERIAL
-    cmdLine_DAPLINKserial.serial().printf("\r\nSPI");
-    if (byteCount > 7) {
-        cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" MOSI->");
-    for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]);
-    }
-    // hex dump misoData[0..byteCount-1]
-    cmdLine_DAPLINKserial.serial().printf("  MISO<-");
-    for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++)
-    {
-        cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]);
-    }
-    cmdLine_DAPLINKserial.serial().printf(" ");
-#endif
-    // VERIFY: DIAGNOSTIC: print MAX5715 device register write
-    // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF);
-    // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF);
-    //
-    //int misoData32 = (misoData32_FF000000 << 24) | (misoData32_FF0000 << 16) | (misoData32_0000FF00 << 8) | misoData32_000000FF;
-    int misoData32 = (misoData[0] << 24) | (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
-    return misoData32;
-}
-
 // CODE GENERATOR: extern function requirement MAX11043::SPIreadWriteWithLowCS
 // SPI read and write arbitrary number of 8-bit bytes
 // SPI interface to MAX11043 shift mosiData into MAX11043 DIN
@@ -486,7 +219,7 @@
 int MAX11043::SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[])
 {
     // CODE GENERATOR: extern function definition for function SPIreadWriteWithLowCS
-    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite32bits(int32_t mosiData32)
+    // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[])
     //size_t byteCount = 4;
     //static char mosiData[4];
     //static char misoData[4];
@@ -727,38 +460,88 @@
     {
         case 8:  // 8-bit register size
             {
-                // SPI 16-bit transfer
-                // SPI MOSI = 0aaa_aaaa_dddd_dddd
-                // SPI MISO = xxxx_xxxx_xxxx_xxxx
-                int16_t mosiData16 = ((int16_t)commandByte << 8) | ((int16_t)regData & 0xFF);
-                SPIoutputCS(0);
-                SPIwrite16bits(mosiData16);
-                SPIoutputCS(1);
+                // SPI 8+8 = 16-bit transfer
+                //            1234 5678 ___[1]_16
+                // SPI MOSI = 0aaa_aaaa_dddd_dddd ... _0000
+                // SPI MISO = xxxx_xxxx_xxxx_xxxx ... _xxxx
+                size_t byteCount = 1 + 1;
+                uint8_t mosiData[2];
+                uint8_t misoData[2];
+                mosiData[0] = commandByte;
+                mosiData[1] = regData;
+                // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
+                SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
+                // TODO: cache CMD_0101_0100_d8_Wr15_FilterCAddress
+                // if (commandByte == CMD_0101_0100_d8_Wr15_FilterCAddress) {
+                //     FilterCAddress = regData;
+                // }
+                // TODO: cache CMD_0110_0000_d8_Wr18_FlashMode
+                // if (commandByte == CMD_0110_0000_d8_Wr18_FlashMode) {
+                //     FlashMode = regData;
+                // }
             }
             break;
         case 16:  // 16-bit register size
-            #warning "Not Verified Yet: MAX11043::RegWrite 16-bit SPIreadWrite32bits"
+            #warning "Not Verified Yet: MAX11043::RegWrite 16-bit"
             {
-                // SPI 24-bit or 32-bit transfer
-                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd
-                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_0000_0000
-                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-                int32_t mosiData32 = ((int32_t)commandByte << 24) | (((int32_t)regData & 0xFFFF) << 8);
-                SPIoutputCS(0);
-                SPIreadWrite32bits(mosiData32);
-                SPIoutputCS(1);
+                // SPI 8+16 = 24-bit transfer
+                //            1234 5678 ___[1]_16 ___[2]_24
+                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd ... _0000
+                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx ... _xxxx
+                size_t byteCount = 1 + 2;
+                uint8_t mosiData[3];
+                uint8_t misoData[3];
+                mosiData[0] = commandByte;
+                mosiData[1] = (uint8_t)((regData >> 8) & 0xFF);
+                mosiData[2] = (uint8_t)((regData >> 0) & 0xFF);
+                // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
+                SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
+                // cache CMD_0010_0000_d16_Wr08_Configuration
+                if (commandByte == CMD_0010_0000_d16_Wr08_Configuration) {
+                    config = regData;
+                }
+                // TODO: cache CMD_0010_0100_d16_Wr09_DAC
+                // TODO: cache CMD_0010_1000_d16_Wr0A_DACStep
+                // TODO: cache CMD_0010_1100_d16_Wr0B_DACHDACL
+                // TODO: cache CMD_0011_0000_d16_Wr0C_ConfigA
+                // TODO: cache CMD_0011_0100_d16_Wr0D_ConfigB
+                // TODO: cache CMD_0011_1000_d16_Wr0E_ConfigC
+                // TODO: cache CMD_0011_1100_d16_Wr0F_ConfigD
+                // TODO: cache CMD_0100_0000_d16_Wr10_Reference
+                // TODO: cache CMD_0100_0100_d16_Wr11_AGain
+                // TODO: cache CMD_0100_1000_d16_Wr12_BGain
+                // TODO: cache CMD_0100_1100_d16_Wr13_CGain
+                // TODO: cache CMD_0101_0000_d16_Wr14_DGain
+                // TODO: cache CMD_0110_0100_d16_Wr19_FlashAddr
+                // TODO: cache CMD_0110_1000_d16_Wr1A_FlashDataIn
             }
             break;
-        case 24:  // 24-bit register size
+        case 32:  // 32-bit register size
+            #warning "Not Verified Yet: MAX11043::RegWrite 32-bit"
             {
-                // SPI 32-bit transfer
-                // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd
-                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
-                int32_t mosiData32 = ((int32_t)commandByte << 24) | ((int32_t)regData & 0x00FFFFFF);
-                SPIoutputCS(0);
-                SPIreadWrite32bits(mosiData32);
-                SPIoutputCS(1);
+                // SPI 8+32 = 40-bit transfer
+                //            1234 5678 ___[1]_16 ___[2]_24 ___[3]_32 ___[4]_40
+                // SPI MOSI = 1aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd_dddd_dddd ... _0000
+                // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx ... _xxxx
+                //
+                size_t byteCount = 1 + (2 * 2);
+                uint8_t mosiData[5];
+                uint8_t misoData[5];
+                mosiData[0] = commandByte;
+                mosiData[1] = (uint8_t)((regData >> 24) & 0xFF);
+                mosiData[2] = (uint8_t)((regData >> 16) & 0xFF);
+                mosiData[3] = (uint8_t)((regData >>  8) & 0xFF);
+                mosiData[4] = (uint8_t)((regData >>  0) & 0xFF);
+                // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
+                SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
+                // TODO: cache CMD_0101_1000_d32_Wr16_FilterCDataOut
+                // if (commandByte == CMD_0101_1000_d32_Wr16_FilterCDataOut) {
+                //     FilterCDataOut = regData;
+                // }
+                // TODO: cache CMD_0101_1100_d32_Wr17_FilterCDataIn
+                // if (commandByte == CMD_0101_1000_d32_Wr16_FilterCDataOut) {
+                //     FilterCDataOut = regData;
+                // }
             }
             break;
     }
@@ -813,50 +596,57 @@
             {
                 // SPI 8+8 = 16-bit transfer
                 //            1234 5678 ___[1]_16
-                // SPI MOSI = 1aaa_aaaa_0000_0000
-                // SPI MISO = xxxx_xxxx_dddd_dddd
-                int16_t mosiData16 = ((CMDOP_0aaa_aa10_ReadRegister | (int16_t)commandByte) << 8) | ((int16_t)0);
-                SPIoutputCS(0);
-                int16_t misoData16 = SPIreadWrite16bits(mosiData16);
-                SPIoutputCS(1);
-                if (ptrRegData) { (*ptrRegData) = (misoData16 & 0x00FF); }
+                // SPI MOSI = 1aaa_aaaa_0000_0000 ... _0000
+                // SPI MISO = xxxx_xxxx_dddd_dddd ... _xxxx
+                size_t byteCount = 1 + 1;
+                uint8_t mosiData[2];
+                uint8_t misoData[2];
+                mosiData[0] = CMDOP_0aaa_aa10_ReadRegister | commandByte;
+                mosiData[1] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh;
+                // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
+                SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
+                if (ptrRegData) { (*ptrRegData) = misoData[1]; }
                 if (commandByte == CMD_0001_1110_d8_Rd07_Status) {
                     // TODO1: update status
-                    status = (misoData16 & 0x00FF);
+                    status = misoData[1];
                 }
             }
             break;
         case 16:  // 16-bit register size
-            #warning "Not Verified Yet: MAX11043::RegRead 16-bit SPIreadWrite32bits"
+            #warning "Not Verified Yet: MAX11043::RegRead 16-bit"
             {
                 // SPI 8+16 = 24-bit transfer
                 //            1234 5678 ___[1]_16 ___[2]_24
                 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000 ... _0000
                 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd ... _xxxx
-                int32_t mosiData32 = ((CMDOP_0aaa_aa10_ReadRegister | (int32_t)commandByte) << 24);
-                SPIoutputCS(0);
-                int32_t misoData32 = SPIreadWrite32bits(mosiData32);
-                SPIoutputCS(1);
-                if (ptrRegData) { (*ptrRegData) = ((misoData32 >> 8) & 0x00FFFF); }
+                size_t byteCount = 1 + 2;
+                uint8_t mosiData[3];
+                uint8_t misoData[3];
+                mosiData[0] = CMDOP_0aaa_aa10_ReadRegister | commandByte;
+                mosiData[1] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh;
+                mosiData[2] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh;
+                // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
+                SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
+                if (ptrRegData) { (*ptrRegData) = (misoData[1] << 8) | misoData[2]; }
                 if (commandByte == CMD_0010_0010_d16_Rd08_Configuration) {
                     // TODO1: update config
-                    config = ((misoData32 >> 8) & 0x00FFFF);
+                    config = (misoData[1] << 8) | misoData[2];
                 }
                 if (commandByte == CMD_0000_0010_d16o8_Rd00_ADCa) {
                     // TODO1: update adca
-                    adca = ((misoData32 >> 8) & 0x00FFFF);
+                    adca = (misoData[1] << 8) | misoData[2];
                 }
                 if (commandByte == CMD_0000_0110_d16o8_Rd01_ADCb) {
                     // TODO1: update adcb
-                    adcb = ((misoData32 >> 8) & 0x00FFFF);
+                    adcb = (misoData[1] << 8) | misoData[2];
                 }
                 if (commandByte == CMD_0000_1010_d16o8_Rd02_ADCc) {
                     // TODO1: update adcc
-                    adcc = ((misoData32 >> 8) & 0x00FFFF);
+                    adcc = (misoData[1] << 8) | misoData[2];
                 }
                 if (commandByte == CMD_0000_1110_d16o8_Rd03_ADCd) {
                     // TODO1: update adcd
-                    adcd = ((misoData32 >> 8) & 0x00FFFF);
+                    adcd = (misoData[1] << 8) | misoData[2];
                 }
             }
             break;
@@ -864,39 +654,44 @@
             {
                 // SPI 8+24 = 32-bit transfer
                 //            1234 5678 ___[1]_16 ___[2]_24 ___[3]_32
-                // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000
-                // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd
-                int32_t mosiData32 = ((CMDOP_0aaa_aa10_ReadRegister | (int32_t)commandByte) << 24);
-                SPIoutputCS(0);
-                int32_t misoData32 = SPIreadWrite32bits(mosiData32);
-                SPIoutputCS(1);
-                if (ptrRegData) { (*ptrRegData) = (misoData32 & 0x00FFFFFF); }
+                // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000 ... _0000
+                // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd ... _xxxx
+                size_t byteCount = 1 + 3;
+                uint8_t mosiData[4];
+                uint8_t misoData[4];
+                mosiData[0] = CMDOP_0aaa_aa10_ReadRegister | commandByte;
+                mosiData[1] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh;
+                mosiData[2] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh;
+                mosiData[3] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh;
+                // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
+                SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
+                if (ptrRegData) { (*ptrRegData) = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; }
                 if (commandByte == CMD_0000_0010_d16o8_Rd00_ADCa) {
                     // TODO1: update adca
-                    adca = (misoData32 & 0x00FFFFFF);
+                    adca = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
                 }
                 if (commandByte == CMD_0000_0110_d16o8_Rd01_ADCb) {
                     // TODO1: update adcb
-                    adcb = (misoData32 & 0x00FFFFFF);
+                    adcb = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
                 }
                 if (commandByte == CMD_0000_1010_d16o8_Rd02_ADCc) {
                     // TODO1: update adcc
-                    adcc = (misoData32 & 0x00FFFFFF);
+                    adcc = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
                 }
                 if (commandByte == CMD_0000_1110_d16o8_Rd03_ADCd) {
                     // TODO1: update adcd
-                    adcd = (misoData32 & 0x00FFFFFF);
+                    adcd = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
                 }
             }
             break;
-        case 32:  // 32-bit register size CMD_0001_0010_d24_d24_Rd04_ADCab, CMD_0001_0110_d24_d24_Rd05_ADCcd
+        case 32:  // 32-bit register size CMD_0001_0010_d16o8_d16o8_Rd04_ADCab, CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd
             //
-            #warning "Not Implemented Yet: MAX11043::RegRead 32-bit CMD_0001_0010_d24_d24_Rd04_ADCab"
-            // TODO: support long SPI read CMD_0001_0010_d24_d24_Rd04_ADCab
+            #warning "Not Implemented Yet: MAX11043::RegRead 32-bit CMD_0001_0010_d16o8_d16o8_Rd04_ADCab"
+            // TODO: support long SPI read CMD_0001_0010_d16o8_d16o8_Rd04_ADCab
             // %SW 0x12 (0 0)   (0 0)   -- for 16-bit read A,B
             // update adca, adcb
             //
-            // TODO: support long SPI read CMD_0001_0110_d24_d24_Rd05_ADCcd
+            // TODO: support long SPI read CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd
             // %SW 0x16 (0 0)   (0 0)   -- for 16-bit read C,D
             // update adcc, adcd
             //
@@ -905,7 +700,6 @@
                 //            1234 5678 ___[1]_16 ___[2]_24 ___[3]_32 ___[4]_40
                 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000_0000_0000 ... _0000
                 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd_dddd_dddd ... _xxxx
-                int32_t mosiData32 = ((CMDOP_0aaa_aa10_ReadRegister | (int32_t)commandByte) << 24);
                 size_t byteCount = 1 + (2 * 2);
                 uint8_t mosiData[5];
                 uint8_t misoData[5];
@@ -917,13 +711,13 @@
                 // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
                 SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
                 if (ptrRegData) { (*ptrRegData) = (misoData[1] << 8) | misoData[2]; }
-                if (commandByte == CMD_0001_0010_d24_d24_Rd04_ADCab) {
+                if (commandByte == CMD_0001_0010_d16o8_d16o8_Rd04_ADCab) {
                     // TODO1: update adca
                     adca = (misoData[1] << 8) | misoData[2];
                     // TODO1: update adcb
                     adcb = (misoData[3] << 8) | misoData[4];
                 }
-                if (commandByte == CMD_0001_0110_d24_d24_Rd05_ADCcd) {
+                if (commandByte == CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd) {
                     // TODO1: update adcc
                     adcc = (misoData[1] << 8) | misoData[2];
                     // TODO1: update adcd
@@ -931,14 +725,14 @@
                 }
             }
             break;
-        case 48:  // 48-bit register size CMD_0001_0010_d24_d24_Rd04_ADCab, CMD_0001_0110_d24_d24_Rd05_ADCcd
+        case 48:  // 48-bit register size CMD_0001_0010_d16o8_d16o8_Rd04_ADCab, CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd
             //
-            #warning "Not Implemented Yet: MAX11043::RegRead 48-bit CMD_0001_0010_d24_d24_Rd04_ADCab"
-            // TODO: support long SPI read CMD_0001_0010_d24_d24_Rd04_ADCab
+            #warning "Not Verified Yet: MAX11043::RegRead 48-bit CMD_0001_0010_d16o8_d16o8_Rd04_ADCab"
+            // TODO: support long SPI read CMD_0001_0010_d16o8_d16o8_Rd04_ADCab
             // %SW 0x12 (0 0 0) (0 0 0) -- for 24-bit read A,B
             // update adca, adcb
             //
-            // TODO: support long SPI read CMD_0001_0110_d24_d24_Rd05_ADCcd
+            // TODO: support long SPI read CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd
             // %SW 0x16 (0 0 0) (0 0 0) -- for 24-bit read C,D
             // update adcc, adcd
             //
@@ -960,13 +754,13 @@
                 // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
                 SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
                 if (ptrRegData) { (*ptrRegData) = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; }
-                if (commandByte == CMD_0001_0010_d24_d24_Rd04_ADCab) {
+                if (commandByte == CMD_0001_0010_d16o8_d16o8_Rd04_ADCab) {
                     // TODO1: update adca
                     adca = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
                     // TODO1: update adcb
                     adcb = (misoData[4] << 16) | (misoData[5] << 8) | misoData[6];
                 }
-                if (commandByte == CMD_0001_0110_d24_d24_Rd05_ADCcd) {
+                if (commandByte == CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd) {
                     // TODO1: update adcc
                     adcc = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
                     // TODO1: update adcd
@@ -974,10 +768,10 @@
                 }
             }
             break;
-        case 64:  // 64-bit register size CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd
+        case 64:  // 64-bit register size CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd
             //
-            #warning "Not Implemented Yet: MAX11043::RegRead 64-bit CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd"
-            // TODO: support long SPI read CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd
+            #warning "Not Verified Yet: MAX11043::RegRead 64-bit CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd"
+            // TODO: support long SPI read CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd
             // %SW 0x1A (0 0)   (0 0)   (0 0)   (0 0)   -- for 16-bit read A,B,C,D
             // update adca, adcb, adcc, adcd
             //
@@ -1001,7 +795,7 @@
                 // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
                 SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
                 if (ptrRegData) { (*ptrRegData) = (misoData[1] << 8) | misoData[2]; }
-                if (commandByte == CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd) {
+                if (commandByte == CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd) {
                     // TODO1: update adca
                     adca = (misoData[1] << 8) | misoData[2];
                     // TODO1: update adcb
@@ -1013,10 +807,10 @@
                 }
             }
             break;
-        case 96:  // 96-bit register size CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd
+        case 96:  // 96-bit register size CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd
             //
-            #warning "Not Implemented Yet: MAX11043::RegRead 96-bit CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd"
-            // TODO: support long SPI read CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd
+            #warning "Not Verified Yet: MAX11043::RegRead 96-bit CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd"
+            // TODO: support long SPI read CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd
             // %SW 0x1A (0 0 0) (0 0 0) (0 0 0) (0 0 0) -- for 24-bit read A,B,C,D
             // update adca, adcb, adcc, adcd
             //
@@ -1044,7 +838,7 @@
                 // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]);
                 SPIreadWriteWithLowCS(byteCount, mosiData, misoData);
                 if (ptrRegData) { (*ptrRegData) = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; }
-                if (commandByte == CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd) {
+                if (commandByte == CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd) {
                     // TODO1: update adca
                     adca = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3];
                     // TODO1: update adcb
@@ -1130,8 +924,8 @@
             // %SW 0x02 (0 0) -- for 16-bit read
             //
             return 16;  // 16-bit register size
-        case CMD_0001_0010_d24_d24_Rd04_ADCab:
-        case CMD_0001_0110_d24_d24_Rd05_ADCcd:
+        case CMD_0001_0010_d16o8_d16o8_Rd04_ADCab:
+        case CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd:
             //
             // TODO: support long SPI read
             if (config & CONFIG_xxxx_xxxx_xx1x_xxxx_24BIT)
@@ -1144,7 +938,7 @@
             // %SW 0x16 (0 0)   (0 0)   -- for 16-bit read C,D
             //
             return 32;  // 32-bit register size: 2*(16)
-        case CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd:
+        case CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd:
             //
             // TODO: support long SPI read
             if (config & CONFIG_xxxx_xxxx_xx1x_xxxx_24BIT)
@@ -1228,9 +1022,9 @@
         case CMD_0000_0110_d16o8_Rd01_ADCb: return "ADCb";
         case CMD_0000_1010_d16o8_Rd02_ADCc: return "ADCc";
         case CMD_0000_1110_d16o8_Rd03_ADCd: return "ADCd";
-        case CMD_0001_0010_d24_d24_Rd04_ADCab: return "ADCab";
-        case CMD_0001_0110_d24_d24_Rd05_ADCcd: return "ADCcd";
-        case CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd: return "ADCabcd";
+        case CMD_0001_0010_d16o8_d16o8_Rd04_ADCab: return "ADCab";
+        case CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd: return "ADCcd";
+        case CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd: return "ADCabcd";
         case CMD_0001_1110_d8_Rd07_Status: return "Status";
         case CMD_0010_0000_d16_Wr08_Configuration: return "Configuration";
         case CMD_0010_0010_d16_Rd08_Configuration: return "Configuration";