1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using NUnit.Framework; 10 using Antmicro.Renode.Core; 11 using Antmicro.Renode.Peripherals.I2C; 12 using System.Threading; 13 using System.Diagnostics; 14 using System.Collections.Generic; 15 16 namespace Antmicro.Renode.PeripheralsTests 17 { 18 [TestFixture] 19 public class BMA180Test 20 { 21 [Test] InitTest()22 public void InitTest() 23 { 24 List<byte> packet = new List<byte>(); 25 var bma180 = new BMA180(); 26 bma180.Reset(); 27 //////////////////////////////////////////////////////////// 28 // Check the Chip ID 29 packet.Add((byte)0xFC); 30 packet.Add((byte)0x00); 31 bma180.Write(packet.ToArray()); 32 packet.Clear(); 33 byte[] registerValue = bma180.Read(); 34 Assert.AreEqual(registerValue[0], 0x3); 35 //////////////////////////////////////////////////////////// 36 // Check CtrlReg0 37 // Read default 38 packet.Add((byte)0xFC); 39 packet.Add((byte)0x0D); 40 bma180.Write(packet.ToArray()); 41 packet.Clear(); 42 registerValue = bma180.Read(); 43 Assert.AreEqual(registerValue[0], 0x0); 44 // Write, set ee_w bit 45 packet.Add((byte)0xFD); 46 packet.Add((byte)0x0D); 47 packet.Add((byte)0x10); 48 bma180.Write(packet.ToArray()); 49 packet.Clear(); 50 // Read back 51 packet.Add((byte)0xFC); 52 packet.Add((byte)0x0D); 53 bma180.Write(packet.ToArray()); 54 packet.Clear(); 55 registerValue = bma180.Read(); 56 Assert.AreEqual(registerValue[0], 0x10); 57 //////////////////////////////////////////////////////////// 58 // Check the SoftReset 59 packet.Add((byte)0xFC); 60 packet.Add((byte)0x10); 61 bma180.Write(packet.ToArray()); 62 packet.Clear(); 63 byte[] softReset = bma180.Read(); 64 Assert.AreEqual(softReset[0], 0); 65 // Write, command 0xB6 for soft reset 66 packet.Add((byte)0xFD); 67 packet.Add((byte)0x10); 68 packet.Add((byte)0xB6); 69 bma180.Write(packet.ToArray()); 70 packet.Clear(); 71 // Read back CtrlReg0 and check that ee_w bit is cleared 72 packet.Add((byte)0xFC); 73 packet.Add((byte)0x0D); 74 bma180.Write(packet.ToArray()); 75 packet.Clear(); 76 registerValue = bma180.Read(); 77 Assert.AreEqual(registerValue[0], 0x0); 78 //////////////////////////////////////////////////////////// 79 // Check LowDur 80 packet.Add((byte)0xFC); 81 packet.Add((byte)0x26); 82 bma180.Write(packet.ToArray()); 83 packet.Clear(); 84 byte[] lowDur = bma180.Read(); 85 Assert.AreEqual(lowDur[0], 0x50); 86 //////////////////////////////////////////////////////////// 87 // Check HighDur 88 packet.Add((byte)0xFC); 89 packet.Add((byte)0x27); 90 bma180.Write(packet.ToArray()); 91 packet.Clear(); 92 byte[] highDur = bma180.Read(); 93 Assert.AreEqual(highDur[0], 0x32); 94 //////////////////////////////////////////////////////////// 95 // Check LowTh 96 packet.Add((byte)0xFC); 97 packet.Add((byte)0x29); 98 bma180.Write(packet.ToArray()); 99 packet.Clear(); 100 byte[] lowTh = bma180.Read(); 101 Assert.AreEqual(lowTh[0], 0x17); 102 //////////////////////////////////////////////////////////// 103 // Check HighTh 104 packet.Add((byte)0xFC); 105 packet.Add((byte)0x2A); 106 bma180.Write(packet.ToArray()); 107 packet.Clear(); 108 byte[] highTh = bma180.Read(); 109 Assert.AreEqual(highTh[0], 0x50); 110 } 111 112 [Test] ReadDataTest()113 public void ReadDataTest() 114 { 115 List<byte> packet = new List<byte>(); 116 var bma180 = new BMA180(); 117 bma180.Reset(); 118 119 // Read temperature measurement 120 // Construct packet list for read of temperature register 121 packet.Add((byte)0xFC); 122 packet.Add((byte)0x08); 123 bma180.Write(packet.ToArray()); 124 packet.Clear(); 125 // Read Temperature register 126 byte[] temperature = bma180.Read(); 127 Assert.Greater(temperature[0], 0); 128 // Read Accelerometer X measurement 129 packet.Add((byte)0xFC); 130 packet.Add((byte)0x02); 131 bma180.Write(packet.ToArray()); 132 packet.Clear(); 133 // Read Accelerometer X LSB and MSB registers 134 byte[] acc_x = bma180.Read(); 135 UInt16 accelerometerX = (UInt16)((((UInt16)acc_x[1] << 6) & 0x3FC0) + (((UInt16)acc_x[0] >> 2) & 0x3F)); 136 Assert.GreaterOrEqual(accelerometerX, 0); 137 Assert.LessOrEqual(accelerometerX, 0x3FFF); 138 // Read Accelerometer Y measurement 139 packet.Add((byte)0xFC); 140 packet.Add((byte)0x04); 141 bma180.Write(packet.ToArray()); 142 packet.Clear(); 143 // Read Accelerometer Y LSB and MSB registers 144 byte[] acc_y = bma180.Read(); 145 UInt16 accelerometerY = (UInt16)((((UInt16)acc_y[1] << 6) & 0x3FC0) + (((UInt16)acc_y[0] >> 2) & 0x3F)); 146 Assert.GreaterOrEqual(accelerometerY, 0); 147 Assert.LessOrEqual(accelerometerY, 0x3FFF); 148 // Read Accelerometer Z measurement 149 packet.Add((byte)0xFC); 150 packet.Add((byte)0x06); 151 bma180.Write(packet.ToArray()); 152 packet.Clear(); 153 // Read Accelerometer Z LSB and MSB registers 154 byte[] acc_z = bma180.Read(); 155 UInt16 accelerometerZ = (UInt16)((((UInt16)acc_z[1] << 6) & 0x3FC0) + (((UInt16)acc_z[0] >> 2) & 0x3F)); 156 Assert.GreaterOrEqual(accelerometerZ, 0); 157 Assert.LessOrEqual(accelerometerZ, 0x3FFF); 158 // Test read of all three accelerometer ADC values in one go 159 // Read Accelerometer X measurement 160 packet.Add((byte)0xFC); 161 packet.Add((byte)0x02); 162 bma180.Write(packet.ToArray()); 163 packet.Clear(); 164 // Read once 165 byte[] acc_data = bma180.Read(); 166 // Check accelerometer data 167 accelerometerX = (UInt16)((((UInt16)acc_data[1] << 6) & 0x3FC0) + (((UInt16)acc_data[0] >> 2) & 0x3F)); 168 Assert.GreaterOrEqual(accelerometerX, 0); 169 Assert.LessOrEqual(accelerometerX, 0x3FFF); 170 accelerometerY = (UInt16)((((UInt16)acc_data[3] << 6) & 0x3FC0) + (((UInt16)acc_data[2] >> 2) & 0x3F)); 171 Assert.GreaterOrEqual(accelerometerY, 0); 172 Assert.LessOrEqual(accelerometerY, 0x3FFF); 173 accelerometerZ = (UInt16)((((UInt16)acc_data[5] << 6) & 0x3FC0) + (((UInt16)acc_x[1] >> 2) & 0x3F)); 174 Assert.GreaterOrEqual(accelerometerZ, 0); 175 Assert.LessOrEqual(accelerometerZ, 0x3FFF); 176 } 177 } 178 } 179 180