Microsoft  CSIP   WindowsMobile   MEDC   合作伙伴   体验中心 设为首页 加到收藏夹

 
登录       点击换一张     注册新用户 找回密码

在.Net Micro Framework中访问硬件 - part3
2008年08月04日11:37   编辑:黄季冬 来源: 博客 浏览: 428

摘要:本文介绍了.Net Micro Framework中对硬件的简单而独特的访问方式。结合模拟器和EmbeddedFusion Tahoe开发板,介绍了如何获取MF设备的电源供给和充电状态,如何获取处理器的特征(如速度等)以及硬件平台ID号等基本硬件信息.

Keywords:

.Net Micro framework, Power supply,Charge state, processor speed

 

一.电源和供电

 

一块MCU或者说一块开发板的工作是从上电开始的, 电源状态的改变是在嵌入式设备中我们经常要处理的问题。

 

在.Net Micro Framework提供了Battery类(在Microsoft.SPOT.Hardware命名空间下),该类提供了一组静态方法来帮助我们方便的获取设备的供电充电状态。有趣的是这个只包含静态方法的类在.Net MF 2.5中居然是可以是实例化的,不过在最新发布的.Net Micro Framework3.0 beta中,已经将它更改为static:


//Battery Class in .Net MF 2.5
 public sealed class Battery

//Battery Class in .Net MF 3.0
 public static class Battery


 

下面我们借助一个简单的程序来看一下如何使用这个Battery类获取电池信息:


public static void Main()
        
{
            Debug.Print(
"*** Battery Info ***");
            
//蓄电池或者蜂窝电池的充电状态
            Debug.Print("State of Charge: " + Battery.StateOfCharge() + "%");

            
//是否充满(对电池来说并不一定是需要到100%才认为是充满了)
            
//这里IsFullyCharged方法只是用来检查是否电池可以承担正常负荷
            Debug.Print("Is fully charged: " +(Battery.IsFullyCharged() ? "Yes" : "No"));

            
//ReadVoltage方法返回供电电压单位为毫伏故要除以1000换算为伏特
            float voltageVolt = Battery.ReadVoltage() / 1000.0f;
            Debug.Print(
"Voltage: " + voltageVolt.ToString("F3"+ " Volt");

            
//ReadTemperature方法返回当前电池温度的10倍摄氏温度
            float degreesCelsius = Battery.ReadTemperature() / 10.0f;
            Debug.Print(
"Temperature: " + degreesCelsius.ToString("F1"+
            
"° Celsius");

            
//OnCharger方法用来返回是否接入外接充电电源
            Debug.Print("On Charger: " + (Battery.OnCharger() ? "Yes" : "No"));
        }

Microsoft Emulator上的输出结果为:

*** Battery Info ***
State of Charge: 0%
Is fully charged: Yes
Voltage: 0.000 Volt
Temperature: 0.0° Celsius
On Charger: No

 

然后我们去项目属性里面将Micro Framework这一栏的Transport方式改为USB,在下拉框中选择Meridian_xxx(这个名称是TAHOE开发板的芯片组的名称,在你装了板子的驱动后,会在这里看到)如图:


EmbeddedFusionTAHOE开发板上输出结果为:

*** Battery Info ***
State of Charge: 75%
Is fully charged: Yes
Voltage: 3.700 Volt
Temperature: 25.0° Celsius
On Charger: Yes


 

和WinCE一样,你还可以在电源状态发生改变的时候获得一个notify,在MF中,是通过Battery.WaitForEvent(Timespan time)方法实现的,该方法会在给定的时间内监听充电状态,一旦充电状态改变或者超时该方法会返回给应用。

 插播广告

欢迎大家积极投稿 :-)

 

二. 处理器信息

 

拿到一块开发板,或者自己搭建开发板,首先需要了解的是芯片(MCU)的一些基本信息。在.Net MF中提供了Microsoft.SPOT.Hardware.Cpu 这个类来描述一些跟处理器相关的信息。比如它包含的Pin类用于描述CPU的管脚和GPIO port的对应情况,当然,这种对应关系需要你针对不同的硬件平台自己进行配制。此外,Cpu类还包含了几个与系统Timer相关的属性,见下面的例子:

 

        public static void Main()
        
{
            
//系统时钟频率,这里换算成兆赫
            float systemClock = Cpu.SystemClock / 1000000.0f;
            Debug.Print(
"System Clock: " + systemClock.ToString("F6"+ " MHz");

            
//还是系统时钟频率,但是是一个较慢较准确的值
            float slowClock = Cpu.SlowClock / 1000000.0f;
            Debug.Print(
"Slow Clock: " + slowClock.ToString("F6"+ " MHz");

            
//GlitchFilterTime主要用于界定GPIO上面的毛刺信号
            string glitchFilterTimeMs = Cpu.GlitchFilterTime.Milliseconds.ToString();
            Debug.Print(
"Glitch FilterTime: " + glitchFilterTimeMs + " ms");
        }

 

Microsoft Emulator上面运行输出如下:

System Clock: 27.000000 MHz
Slow Clock: 0.000000 MHz

Glitch FilterTime: 0 ms

 

EmbeddedFusion Tahoe开发板上输出如下:

System Clock: 16.000000 MHz
Slow Clock: 16.000000 MHz
Glitch FilterTime: 20 ms


 

Note 这里的System Clock和SlowClock都是设备生产商设置的,比如这里Tahoe的开发板将两者都设置为16兆赫,一般来说Slow Clock是System clock的1/N ,如: 1/2, 1/4, 1/12, 1/14, 1/28, 1/56, 1/69, 1/127等。Cpu的实际速

12末页下一页

发表评论
评论标题 :
评论内容 :

    查看评论

请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。 本站拥有管理笔名和留言的一切权利。
相关文章推荐
· 在 PokectPC 上创建非全屏的窗体 2008-7-23  cppguy
· 值得期待的.Net Micro Framework 3.0 2008-7-16  叶帆
· .NET Framework 3.0:Windows Vista 平台上的设计 2008-7-15  James Vastbinder
· .NET Framework、.NET Compact Framework、.NET Micro Framework 2008-7-15  James Vastbinder
· Opening the .NET MF 3.0 kimono 2008-7-15  MS .Net Micro Framework team

  

论坛推荐  
热点活动
更多»

© CSIP 信息产业部软件与集成电路促进中心 All Rights Reserved 版权所有 京ICP备06020771号
联系电话:010-63951881-8003 王先生        邮件:wangj@csip.org.cn