Welcome

首页 / 软件开发 / .NET编程技术 / 在.Net Micro Framework中访问硬件 - part2

在.Net Micro Framework中访问硬件 - part22011-11-30 博客园 fox23摘要:本文介绍了.Net Micro Framework中对硬件的简单而独特的访问方式。涉及I2C,SPI等。通过简明的例程说明了如何在.Net MF中创建并访问I2C和SPI设备

I2C Bus

尽管MCU采用I2C(Inter-Integrated Circuit)总线的方式与外设通信会比很多其他总线系统要慢(最高100kbps),但是由于其成本低,对可插拔的设备支持较好,在很多场合它仍是作为标准的feature得到支持。

那么如何在.Net Micro Framework中访问I2C方式连接的设备呢?

.Net MF提供了一个Microsoft.SPOT.Hardware.I2CDevice的类来实现访问IIC设备的功能。首先,你需要为每个IIC设备创建一个I2CDevice的实例,和之前提到的SerialPort类似的,你需要为它的构造函数传入一个I2CDevice.Configuration的配置对象。在这个配置对象里面你需要指定该设备的地址和通信速度(khz)。接着,你需要创建一组事务对象(CreateReadTransaction和CreateWriteTransaction)来进行读写操作,具体的事务类型自然是取决于你的具体组件的作用了。当你创建事务时,你需要传入一个待读(写)的缓冲区。

然后,你需要把这组事务以数组的形式传递给Execute方法供执行并开始进行通信。Execute方法将会在所有事务执行完毕或者方法超时的时候返回。

下面的代码演示了如何对地址编号为58的I2C设备进行通信。

using System;using Microsoft.SPOT;using Microsoft.SPOT.Hardware;namespace I2CSample{public class Program{public static void Main(){I2CDevice.Configuration config =new I2CDevice.Configuration(58, //地址号100 //100khz的时钟频率);I2CDevice device = new I2CDevice(config);byte[] outBuffer = new byte[] { 0xAA }; //待写bufferbyte[] inBuffer = new byte[4];//待读bufferI2CDevice.I2CWriteTransaction writeTransaction =device.CreateWriteTransaction(outBuffer);I2CDevice.I2CReadTransaction readTransaction =device.CreateReadTransaction(inBuffer);//创建一个事务数组I2CDevice.I2CTransaction[] transactions =new I2CDevice.I2CTransaction[] {writeTransaction,readTransaction};int transferred = device.Execute(transactions,100 //超时时间设为100ms);//transferred bytes should be 1 + 4 = 5}}}