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