在.Net Micro Framework中访问硬件 - part2

相关文章

在.Net Micro Framework中访问硬件 - part1

 

在.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²CInter-Integrated Circuit)总线的方式与外设通信会比很多其他总线系统要慢(最高100kbps),但是由于其成本低,对可插拔的设备支持较好,在很多场合它仍是作为标准的feature得到支持。

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

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

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

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

 

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 }//待写buffer

byte[] inBuffer = new byte[4];//待读buffer

I2CDevice.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

}


}


}


 

SPI BUS

SPI(Serial peripheral interface)连接需要三条线:时钟(SCLK),输入(MISO)和输出(MOSI),支持全双工的通信方式。对SPI的设备来说,不存在地址的概念,它们与MCU之间通过一个单独的引脚相连,在这条连线上的信号即所谓的片选信号(SSCSSTE)。MCUSPI设备提供时钟信号,每一个时钟周期(总线时钟)内MCUSPI之间发送一位(1 bit)数据(在片选信号到来之后)

.Net Microframework中提供了Microsoft.SPOT.Hardware.SPI类来访问SPI设备。对于每一台SPI的设备,你首先需要为之创建一个SPI类的实例。和前面提到的其他连接方式的设备类似,在构造函数中你同样需要传递给它一个SPI.Confuguration实例来配置它,当然,在完成这个配置之前,需要先参考一下你的SPI组件的Data Sheet了.

下面的代码演示了如何在.NET MF中使用SPI:

 

SPI.Configuration config = new SPI.Configuration(
chipSelectPin, 
//片选引脚号
false//片选信号为低时访问SPI设备
1//在传输数据前,片选信号setup的时间(ms)
1//芯片的片选保持时间(ms)

true//在设备没有被选择的时候,SCKL设置为高电平

false//数据在下降沿采集

15000//时钟频率为15000khz(即15MHz)
SPI.SPI_module1 //使用的MCU的哪一组SPI

);
SPI spi 
= new SPI(config);//使用上述配置构造SPI实例

 

在创建好这个spi的实例之后,数据的传输可以通过它的Write或者WriteRead方法来实现.片选的运作由.NET MF维持,你不需要按一定的时许手动从GPIO读写。下面的代码段演示了如何从MCU发送一个16位的命令并读取数据(反馈结果):

 

ushort writeBuffer = new ushort[1= 0xAAAA;
ushort readBuffer = new ushort[1];
spi.WriteRead(writeBuffer, readBuffer);

 

SPI的HardwareProvider

我们同样可以为SPI注册HardwareProvider来保留相应的3个管脚。你需要重载HardverProvider的GetSpiPins虚方法并传递给相应的SPI总线需要的三个Cpu的引脚号:

 

public override void GetSpiPins(SPI.SPI_module spi_mod,
out Cpu.Pin msk,
out Cpu.Pin miso,
out Cpu.Pin mosi)
{
msk 
= Cpu.Pin.GPIO_Pin1;//serial clock line(SCKL)

miso 
= Cpu.Pin.GPIO_Pin2;//master in/slave out line(MISO)
mosi = Cpu.Pin.GPIO_Pin3;//master out/slave in line(MOSI)
}

 

参考资源:

 

  • MS .Net Micro Framework team
  • Windows Embedded blog From china
  • MVP 刘洪峰的blog
  • .Net MF国内的资源站点Winbile.Net(正在改版)
  • [书籍]Embedded Programming with the .Net Micro Framework
  • [书籍]Expert .Net Micro Framework

     

    enjoy it!

     

    黄季冬

     



     

     

  • posted on 2008-07-23 22:55 Freesc Huang 阅读(1310) 评论(4) 编辑 收藏

    评论

    #1楼 2008-07-24 12:21 56565[未注册用户]

    2个问题 I2c能不能给个具体的例子 是什么接口
    100 //100khz的时钟频率 这个100能不能换成其他的
     回复 引用   

    #2楼 2008-07-24 12:22 56565[未注册用户]

    那个机器 最好给几个连接或者组装的图片 光看程序也不知道机器怎么连接 怎么接线  回复 引用   

    #3楼 2008-07-24 22:20 留恋星空      

    ?  回复 引用 查看   

    #4楼[楼主] 2008-07-26 23:20 fox23      

    @56565
    1.任何一块实现了mf的板子均可适用上述代码,只需参照mcu和外设的spec对应好pin脚
    2.100hz的频率是跟据你的具体设备和应用场景可调的
    3.我们适用的自己改装的板子,暂时不便也不需要提供图片
    best regards,

    黄季冬
     回复 引用 查看   

    <2012年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    26272829123
    45678910

    公告

    These postings are provided "AS IS" with no warranties
    and confer no rights.


    Locations of visitors to this page

    Blog Keywords
    Embedded System,Visual Studio,.Net Framework,.Net Compact Framework,.Net Micro Framework,Windows Mobile,Windows Embedded CE,Emulator,WCF,CLR,Design & Pattern,C/C++,C#,Matlab,Algorithms
    昵称:Freesc Huang
    园龄:4年11个月
    粉丝:32
    关注:4

    统计

    • 随笔 - 197
    • 文章 - 0
    • 评论 - 840

    搜索

     

    随笔分类(227)

    随笔档案(197)

    Blogs

    Link

    积分与排名

    最新评论

    阅读排行榜

    评论排行榜

    推荐排行榜