private void TestSpiFunctionality() { switch (FX3.WordLength) { case 8: Assert.AreEqual(0x55, FX3.Transfer(0x55) & 0xFF, "ERROR: SPI data failed to echo back. SCLK Freq " + FX3.SclkFrequency.ToString() + "Hz"); Assert.AreEqual(0xAA, FX3.Transfer(0xAA) & 0xFF, "ERROR: SPI data failed to echo back. SCLK Freq " + FX3.SclkFrequency.ToString() + "Hz"); break; case 16: Assert.AreEqual(0x5555, FX3.Transfer(0x5555) & 0xFFFF, "ERROR: SPI data failed to echo back. SCLK Freq " + FX3.SclkFrequency.ToString() + "Hz"); Assert.AreEqual(0xAAAA, FX3.Transfer(0xAAAA) & 0xFFFF, "ERROR: SPI data failed to echo back. SCLK Freq " + FX3.SclkFrequency.ToString() + "Hz"); break; case 32: default: Assert.AreEqual(0x55555555, FX3.Transfer(0x55555555), "ERROR: SPI data failed to echo back. SCLK Freq " + FX3.SclkFrequency.ToString() + "Hz"); Assert.AreEqual(0xAAAAAAAA, FX3.Transfer(0xAAAAAAAA), "ERROR: SPI data failed to echo back. SCLK Freq " + FX3.SclkFrequency.ToString() + "Hz"); break; } }
public void SpiTransferTest() { Console.WriteLine("Starting SPI transfer test..."); uint writeVal; uint[] readArray; List <uint> writeData = new List <uint>(); /* Set word length of 8 */ Console.WriteLine("Testing word length of 8 bits..."); FX3.WordLength = 8; TestSpiFunctionality(); for (int bit = 0; bit < 8; bit++) { Console.WriteLine("Testing bit " + bit.ToString()); Assert.AreEqual(1U << bit, FX3.Transfer(1U << bit), "ERROR: SPI loop back failed"); } /* Bits outside of word length should not be echo'd */ for (int bit = 8; bit < 32; bit++) { Console.WriteLine("Testing bit " + bit.ToString()); Assert.AreEqual(0, FX3.Transfer(1U << bit), "ERROR: SPI loop back failed"); } /* Set word length of 16 */ Console.WriteLine("Testing word length of 16 bits..."); FX3.WordLength = 16; for (int bit = 0; bit < 16; bit++) { Console.WriteLine("Testing bit " + bit.ToString()); Assert.AreEqual(1U << bit, FX3.Transfer(1U << bit), "ERROR: SPI loop back failed"); } /* Bits outside of word length should not be echo'd */ for (int bit = 16; bit < 32; bit++) { Console.WriteLine("Testing bit " + bit.ToString()); Assert.AreEqual(0, FX3.Transfer(1U << bit), "ERROR: SPI loop back failed"); } /* Set word length of 24 */ Console.WriteLine("Testing word length of 24 bits..."); FX3.WordLength = 24; for (int bit = 0; bit < 24; bit++) { Console.WriteLine("Testing bit " + bit.ToString()); Assert.AreEqual(1U << bit, FX3.Transfer(1U << bit), "ERROR: SPI loop back failed"); } /* Bits outside of word length should not be echo'd */ for (int bit = 24; bit < 32; bit++) { Console.WriteLine("Testing bit " + bit.ToString()); Assert.AreEqual(0, FX3.Transfer(1U << bit), "ERROR: SPI loop back failed"); } /* Set word length of 32 */ Console.WriteLine("Testing word length of 32 bits..."); FX3.WordLength = 32; for (int bit = 0; bit < 32; bit++) { Console.WriteLine("Testing bit " + bit.ToString()); Assert.AreEqual(1U << bit, FX3.Transfer(1U << bit), "ERROR: SPI loop back failed"); } Console.WriteLine("Testing random 32-bit values..."); var rnd = new Random(); for (int trial = 0; trial < 256; trial++) { writeVal = (uint)(rnd.NextDouble() * uint.MaxValue); Console.WriteLine("Writing 0x" + writeVal.ToString("X8")); Assert.AreEqual(writeVal, FX3.Transfer(writeVal), "ERROR: SPI loop back failed"); } Console.WriteLine("Testing array based SPI transfers..."); for (int writeSize = 1; writeSize < 10; writeSize++) { writeData.Clear(); for (uint i = 0; i < writeSize; i++) { writeData.Add(i); } for (uint numBuffers = 1; numBuffers < 10; numBuffers++) { for (uint numCaptures = 1; numCaptures < 10; numCaptures++) { Console.WriteLine("Testing write data array " + writeSize.ToString() + " words long, with " + numCaptures.ToString() + " numcaptures and " + numBuffers.ToString() + " numbuffers"); readArray = FX3.TransferArray(writeData, numCaptures, numBuffers); /* Size should be write data count * numbuffers * numCaptures */ Assert.AreEqual(writeSize * numBuffers * numCaptures, readArray.Count(), "ERROR: Invalid data size received"); int i = 0; /* Check echo data */ for (int index = 0; index < readArray.Count(); index++) { i = index % writeSize; Assert.AreEqual(writeData[i], readArray[i], "ERROR: Invalid SPI data at index " + index.ToString()); } } } } }