相关文章
在.Net Micro Framework中访问硬件 - part2
摘要:本文介绍了.Net Micro Framework中对硬件的简单而独特的访问方式。涉及I2C,SPI等。通过简明的例程说明了如何在.Net MF中创建并访问I2C和SPI设备
Keywords: .Net Micro framework, I2C, SPI, Embedded, C#
I²C Bus
尽管MCU采用I²C(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设备进行通信。
SPI BUS
SPI(Serial peripheral interface)连接需要三条线:时钟(SCLK),输入(MISO)和输出(MOSI),支持全双工的通信方式。对SPI的设备来说,不存在地址的概念,它们与MCU之间通过一个单独的引脚相连,在这条连线上的信号即所谓的片选信号(SS,CS或STE)。MCU为SPI设备提供时钟信号,每一个时钟周期(总线时钟)内MCU与SPI之间发送一位(1 bit)数据(在片选信号到来之后)。
在.Net Microframework中提供了Microsoft.SPOT.Hardware.SPI类来访问SPI设备。对于每一台SPI的设备,你首先需要为之创建一个SPI类的实例。和前面提到的其他连接方式的设备类似,在构造函数中你同样需要传递给它一个SPI.Confuguration实例来配置它,当然,在完成这个配置之前,需要先参考一下你的SPI组件的Data Sheet了.
下面的代码演示了如何在.NET MF中使用SPI:
在创建好这个spi的实例之后,数据的传输可以通过它的Write或者WriteRead方法来实现.片选的运作由.NET MF维持,你不需要按一定的时许手动从GPIO读写。下面的代码段演示了如何从MCU发送一个16位的命令并读取数据(反馈结果):
SPI的HardwareProvider
我们同样可以为SPI注册HardwareProvider来保留相应的3个管脚。你需要重载HardverProvider的GetSpiPins虚方法并传递给相应的SPI总线需要的三个Cpu的引脚号:
参考资源:
enjoy it!
黄季冬