Neil's profileMindRoadPhotosBlogListsMore Tools Help

MindRoad

大海扬帆看日出日落 碧空展翅笑云卷云飞
6/23/2009

SD卡的读写和加解密

一、概述

SD卡全称为 Secrue Digital Memory Card,具有轻巧、可加密、传输速度高、适用于手持设备使用等优点。

二、总线接口

SD需要高速读写,同时也要使手持等嵌入式设备能方便使用,特设有两个访问接口中:SD模式接口和SPI接口。SD卡在上电初期,卡主控通过检测引脚1(DAT3)来决定使用SD模式还是SPI模式。当此脚接50KOhm上拉电阻时,卡进入SD模式;当此脚为低电平,卡则工作于SPI模式。

1、SPI接口

SPI接口是为嵌入式和手持设备准备的,只使用普通的三线制SPI总线,即可对卡进行一般的慢速的读写等操作。

<!--[if !vml]-->图略<!--[endif]-->

图一:SPI总线

如上图,由读卡器到卡的数据,在每个时种的上升沿把DO的数据锁存到卡主控,而卡的数据则在每个CLK的上升沿把DI的数据读入读卡器。

2、SD接口

SD接口是为高速专有设备而设计,使设备能对卡进行高速可靠的传输而设计,因SD模式在每个命令及数据转输时,都必须具有正确的CRC校验。因此,此模式下主机一般需要专门设计的硬件模块以产生CRC校验。

在此模式下,SD卡具有四根数据线,且时种速度最大可达50MHz,所以此模式下数据传输速率比SPI模式快得多。

三、总线协议

SD卡命令共分为12类,分别为class0到class11,不同的卡主控根据其功能,支持不同的命令集。主要如下:

class0:卡的识别、初始化命令集。

class2:读卡命令集

class4:写卡命令集

class7:卡的锁定,解锁功能命令集

SD卡只有唯一的主机,所有命令是由主机发出。总线上可传输三种类型数据,分别是命令帧、响应、数据。

命令帧:由总线上唯一的主机发出,由设备响应并执行。

响应:指设备响应主机的命令。

数据:指由主机传给设备,或由设备传给主机的数据实体。

<!--[if !vml]-->图略<!--[endif]-->

如上图,命令帧一共由48bit组成,其中起始位固定为0,结束位固定为1。每个命令最后1字节包含7bit的CRC校验,第一字节为的另外7bit为命令码,中间的32bit为命令参数。

一个完整的命令由命令帧和响应,或命令帧、响应和数据组合而成。

<!--[if !vml]-->图略<!--[endif]-->

图二:Mult Block Read

如上图,主机发出command请求,然后卡返回该命令的respond,如果respond响应为正确,则Host通过读取cmd线状态,等待卡准备好数据;如果cmd为低电平,表示卡busy,busy结束后卡会把cmd线拉高,并且发出start token,随即进入数据传输阶段;数据传输结束后,主机发送结束命令停止命令,传输结束。
四、卡的初始化
上电后,卡处于IDLE状态,主机发送CMD0复位SD Card,然后通过CMD55和ACMD41判断当前电压是否在卡的工作范围内。但如果是MMC卡,则不能识别CMD55,所以可以通过此命令的响应正确与否,判断插入的是MMC卡还是SD卡。
得到正确的响应后,主机可以继续通过CMD10读取SD卡的CID寄存器,通过CMD16设置数据Block长度,通过CMD9读取卡的CSD寄存器。从CSD寄存器中,主机可获知卡容量,支持的命令集等重要参数。
此时,卡已进入了传输状态,主机就可通过CMD17/18和CMD24/25对卡进行读写。
继SD1.1之后又推出了SD2.0,主要特性是支持更大容量。SD1.1中卡容量存放于CSD寄存器中,而由于其规范中相关域的值较小,固最大只能表示2G地址。随着Nand容量的大大提高,SD1.1已经不适合潮流,因而推出了SD2.0。
初始化流程大同小义,只需要CMD0之后再加上CMD8命令的识别。SD1.1不支持CMD8,而SD2.0的CMD8能读到卡的接口信息。如果卡响应CMD8为无效命令,则走SD1.1的流程,可能是SD1.1或MMC。如CMD8响应正确,则很可能是SD2.0了。

五、加密

SD卡具有安全加密功能,内置128bit加密位,在加密状态下,用户需提供密码才可以访问卡内的数据。

在卡上电时,若卡包含密码,卡自动进入锁定状态,读写命令均返回错误,以保护卡内容不被读出及修改。

密码设置功能由CMD42实现,其数据包中包括该命令中所有的信息。

擦除:此位置1时,卡的密码和内容会被强制擦除,在遗忘密码时可使用此功能。

锁定/解锁:此位置1时,表示命令结束后状态为锁定,为0,表示卡解锁。

清除密码:此位置1,表示清除卡的旧密码,此时数据中必须包含旧密码的正确内容。

加密:此位置1,表示设置卡的新密码,数据中必须包含新密码内容;更改密码时,新密码紧跟随旧密码内容。

注:在CMD42命令之前,首先要使卡工作在传输状态,在SD模式下可使用CMD7进行状态转换,在SPI模式下,可使用初始化序列进行状态切换。

在任意刻,主机可以通过CMD13命令读取卡的内部状态,判断其锁定状态。定义如下:

<!--[if !vml]-->图略<!--[endif]-->

bit0置1表示卡处于锁定状态。

1、设置密码

使用CMD16设置Block长度为密码长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;

使用CMD16恢复原Block长度。

2、清除密码

使用CMD16设置Block长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x02,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;

使用CMD16恢复原Block长度。

3、卡的锁定、解锁

使用CMD16设置Block长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x04,LEN,密码[LEN]……,0xFF,0xFF;

使用CMD16恢复原Block长度。

4、修改密码

使用CMD16设置Block长度为OLD_PWD_LEN+NEW_PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x05,LEN,旧密码[n],新密码[m]……,0xFF,0xFF;

使用CMD16恢复原Block长度。

5、卡擦除

使用CMD16设置Block长度为1;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x08,0xFF,0xFF;

使用CMD16恢复原Block长度。

原文:http://www.fly2web.cn/read.php?tid-69.html

6/19/2009

LCD调试的几个心得

从网上收集的,收藏一下!

LCD调试中的常见问题以及注意事项

功能:Init、SleepIn、SleepOut、DisplayOn、DisplayOff
注意事项:
LCD的调试中,延时特别重要,一定要确定延长的时间足够,特别是更改电压寄存器后面的延时。记得有一次屏幕出现抖动的现象,一直查不出原因,厂家从日本派了2次来人,都没解决;最后,把所有的时序测试出来,发现延时不足,影响延时的一个函数传递参数错了。
1.初始化前需要一个延时(大概为10ms),使Reset稳定;
2.如果出现花屏现象,很大的可能是总线速度问题;
3.如果屏幕闪动比较明显,可以通过调整电压来稳定,一般调节的电压为VRL、VRH、VDV和VCM;这些电压也可以用来调节亮暗(对比度);
4.调节对比度时,也可以通过调节Gamma值来实现,要调节的对象为:PRP、PRN、VRP、VRN等;
5.注意数据是8位、16位时,写命令和数据的函数注意要变化;
6.如果调试时发现LCD的亮度有问题,首先检查(考虑)提供给LCD的电流是否一致,再考虑调节电压。
7.开机花屏问题,最简单的处理方式就是在INIT结束的地方增加一个刷黑屏的功能。也可以在睡眠函数里加延时函数;
8. 如果随机出现白屏问题,一个可能是静电问题,把LCD拿到头发上擦几下,如果很容易出现白屏那肯定就是静电问题了。另外一个在有Backend IC的情况下,也有可能bypass没处理好。
9.还碰到过一个问题,写PLL的寄存器写了2次,屏幕就抖动的很厉害。这个问题应该跟LCD内部实现有关了,并不是每个都会。
10.横向抖动,看不清画面,修改ENTRY MODE
11.如果字体反了,修改drive output control ,GS,SS;
12.如果图像刷新上面的字体跑到下面等,区域刷新没处理好;
13.如果图像分开显示,起始点不在原点,多半是全屏刷新起始点寄存器没有设好;
14.DMA刷新方式,每次刷新为一行,只能一次刷一整行,不然会出错,减少了循环计算时间,提高了LCD的刷新速度,也就减少了响应时间;

网上资料:
今天调LCD出现在这样的问题,就是显示图像时,在明暗颜色过渡间,会出现一些亮点,有时还不停的闪动,谁遇到过这样的情况呀?是硬件的问题还是软件可调呀?
我调整pixel clock 极性,由上升沿采样改由下降沿采样就没事了.不知怎么回事
2 LCD有水波纹一般什么问题
个信号short到地,可以看一下板子是否受到干扰,比如电源或晶振部分,再一个是否你输出至LCD 的信号线走的有问题,看看电源和背光电压是否有纹波,检查一下LCD周边外围电路的电阻、电容、电压是否很干净。
这个主要是在信号输入时右能出现于拢,信号线之间、地线与信号线之间出现了信号的反射或于拔;还有一种情况就是摄像头控制IC不稳定,输出的控制信号不稳或有毛剌
    1,背光芯片输出的纹波:检查charge pump(dc-dc)电路,替换为合适的滤波电容;

    2,LCD driver 电源管理:

(1)3级chargepump之间确保有足够的时间延迟,不同的系统这个要调整;

(2)chargepump的输出端要加足够大的滤波电容,具体选择看波形

    3,修改driver ,主要是有关显示周期方面方面的寄存器设置

肯定是背光电源module的问题,估计你采用的是PWM方式控制屏的亮度!

这种纹波产生的原因是LCD的刷屏频率与白光灯的频率频差小于20Hz造成的,就像在日光灯下看高速旋转的电风扇叶子的影响一样!好解决,要软件调一调PWM的频率,运气好就可以解决问题,如果LCD的刷频不是很稳定,就不能100%解决问题了
于LCD条纹的问题:

    1、条纹的宽度,较宽的条纹一般跟背光有较大的关系
    2、有些LCD在晃动时,由于视角的变化,逐行扫描比较明显,这种情况跟有些driver IC有关系,只能通过修改参数优化
    3、参数没有调试好,涉及扫描频率、驱动行列的电压有关!

4手机 LCD&Camera ESD 问题
Air Display, Standalone(Isolated), Preview mode( Camera on)
手机为单板(不是折叠或者滑盖)
如果手机屏朝上,+-10kV pass;
但手机朝下,+-3kV就花屏了
试试屏向下把手机垫起离开桌面一定距离还有没有问题,如果好了,就找一下放电回路,可能是手机屏的控制电路与金属板距离短了后,电容增大,阻抗减小,本来可以从其它路径放掉的电,从这个电路走了,想办法提高这个路径的阻抗或为放电电流提供一个其它的低阻抗通路。
5 调试LCD出现花屏
1)信号的时序,尤其是RS,很大可能是送的数据被认为是指令而出错了。
2)复位信号的时机、时长,复位信号变高到送数据的时间足够。
3)初始化的指令先后顺序、正确性。
4)初始化时高压的打开是否符合规格式要求?

6/2/2009

So this is tech (1): Freescale, Qualcomm mint smartbooks at Computex

Freescale, Qualcomm mint smartbooks at Computex
ARM/Linux portables different than netbooks, they say

Rick Merritt
EE Times
(06/01/2009 12:04 H EDT)

SAN JOSE, Calif. — What's bigger than a smart phone, smaller than a notebook and different than a netbook? That's the description of a smartbook, a term Freescale and Qualcomm are minting at Computex for the ARM- and Linux-based portables their customers are designing.

Intel popularized the term netbooks to refer to ultra small laptops, generally using its Atom processor and some version of Microsoft Windows. Compared to netbooks, smartbooks will be smaller, cheaper, and have longer battery life and instant-on capabilities, backers say.

"We are re-labeling this category smartbooks," said Glen Burchers, a consumer marketing director for Freescale.

Whatever you call them, mobile devices will be all the rage at Computex in Taipei where about 80 percent of the world's notebook computers are made. Chip makers including Broadcom, Nvidia and Sandisk are expected to make announcements at Computex about their activities around netbooks.

Several of Taiwan's contract design and manufacturing companies will show smartbooks at Computex based on Freescale's iMX51 processor, Burchers said. Branded OEM product launches are not expected until the fall.

Some of the new systems will use a notebook-like clamshell form factor but be about 20mm thick compared to 30mm for some Windows/x86 netbooks, Burchers said. In addition, the smartbooks will run an entire day on a single battery, thanks to the power-pinching ARM processors, he added.

Some of the ARM-based systems will sell for as little as $199. Atom-based notebooks typically sell for $399 to $599.

Taiwan's Pegatron and Wistron will both show clamshell smartbooks at Computex. Burchers said he believes the companies have deals to sell the designs to OEMs.

More than a dozen companies plan to be shipping smartbooks by this fall using chips from Freescale, Texas Instruments and Qualcomm, according to Will Strauss, principal of market watcher Forward Concepts (Tempe, Ariz.). "We believe that smartbooks could be a 40-million unit annual market by 2013," Strauss wrote in a newsletter released Sunday (May 31).

To drive the new concept forward, Freescale hired industrial designers from the Savannah College of Art and Design. They have researched the requirements of target users and developed concept physical and user interface designs to display at Computex.

Pictures of two of the new concept designs to be shown at Computex are displayed below.


Click on image to enlarge.

The Freescale work mirrors efforts years ago by Intel to stage a fashion show to get PC makers to design more stylish desktop computers. "Taiwan doesn't have a lot of focus on industrial design," said Burchers.


Click on image to enlarge.

He acknowledged two concerns for smartbooks are the lack of native support for Adobe Flash on ARM and the fragmentation of Linux application environments. However, he said solutions to both issues are in the works.

Some OEMs will use Adobe Flash Lite 3.1 in devices shipping this fall. The software is roughly equivalent to Adobe Flash 9 for desktop PCs and can handle video from the vast majority of popular Web sites, he said. A version of Flash 10 for ARM could be available by the end of the year, he added, though Adobe said the code may not be widely available until early 2010.

On the application front, Freescale is showing customers a prototype app store for Linux that aggregates as many as 6,000 Linux applications and tools. The company expects OEMs will develop their own online app stories for smartbooks just as Apple has done for the iPhone.

"One of the downsides of Linux is the fragmented nature of it," he said. "That's why so many designers are excited about Google's Android, because it's managed by a single entity," he added.

Android supports 320x480 pixel displays now and will support 800x480 in its next version called Donut. But work is going on to bring to Android support for 1280x1024 pixel resolutions as well as external USB peripherals, he added.

5/28/2009

C++ Primer, Fourth Edition -- Abstract

By Stanley B. Lippman , Josée Lajoie , Barbara E. Moo

1-100

2.3.5. Declarations and Definitions

A definition of a variable allocates storage for the variable and may also specify an initial value for the variable. A declaration makes known the type and name of the variable to the program.

extern int i; // declares but does not define i
int i; // declares and defines i

extern double pi = 3.1416; // definition

2.4. const Qualifier

const Objects Are Local to a File By Default

// file_1.cc
int counter; // definition
// file_2.cc
extern int counter; // uses counter from file_1
++counter; // increments counter defined in file_1

Unlike other variables, unless otherwise specified, const variables declared at global scope are local to the file in which the object is defined. The variable exists in that file only and cannot be accessed by other files.
We can make a const object accessible throughout the program by specifying that it is extern :
// file_1.cc
// defines and initializes a const that is accessible to other files
extern const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses bufSize from file_1

// uses bufSize defined in file_1
for (int index = 0; index != bufSize; ++index)
// ...

2.5. References

A reference must be initialized using an object of the same type as the reference:
int ival = 1024;
int &refVal = ival; // ok: refVal refers to ival
int &refVal2; // error: a reference must be initialized
int &refVal3 = 10; // error: initializer must be an object

A Reference Is an Alias

Because a reference is just another name for the object to which it is bound, all operations on a reference are actually operations on the underlying object to which the reference is bound:
refVal += 2;
adds 2 to ival , the object referred to by refVal . Similarly,
int ii = refVal;
assigns to ii the value currently associated with ival .

When a reference is initialized, it remains bound to that object as long as the reference exists. There is no way to rebind a reference to a different object.

 

const References
A const reference is a reference that may refer to a const object:
const int ival = 1024;
const int &refVal = ival; // ok: both reference and object are const
int &ref2 = ival; // error: non const reference to a const object

A const reference can be initialized to an object of a different type or to an rvalue (Section 2.3.1 , p. 45 ), such as a literal constant:
int i = 42;
// legal for const references only
const int &r = 42;
const int &r2 = r + i;
The same initializations are not legal for nonconst references. Rather, they result in compile-time errors. The reason is subtle and warrants an explanation.

 

The same initializations are not legal for nonconst references. Rather, they result in compile-time errors. The reason is subtle and warrants an explanation.
This behavior is easiest to understand when we look at what happens when we bind a reference to an object of a different type. If we write
double dval = 3.14;
const int &ri = dval;
the compiler transforms this code into something like this:
int temp = dval; // create temporary int from the double
const int &ri = temp; // bind ri to that temporary
If ri were not const , then we could assign a new value to ri . Doing so would not change dval but would instead change temp . To the programmer expecting that assignments to ri would change dval , it would appear that the change did not work. Allowing only const references to be bound to values requiring temporaries avoids the problem entirely because a const reference is read-only.

2.8. Class Types

Using the structKeyword
C++ supports a second keyword, struct , that can be used to define class types. The struct keyword is inherited from C.
If we define a class using the class keyword, then any members defined before the first access label are implicitly private ; ifwe usethe struct keyword, then those members are public . Whether we define a class using the class keyword or the struct keyword affects only the default initial access level.

 

 

Addison Wesley - c++ faqs (2nd Version)

FAQ 2.04 What are the basics of default parameters?

C++ allows functions to have default parameters. This is useful when a parameter should have a specified value when the caller does not supply a value. For example, suppose that the value 42 should be passed to the function f() when the caller does not supply a value. In that case, it would make the calling code somewhat simpler if this parameter value were supplied as a default value:

void f(int x=42);                                    <-- 1

void f(int x)                                        <-- 2
{
  //...
}

int main()
{
  f(29);                                             <-- 3
  f();                                               <-- 4
}

(1) Declare the default parameter(s) in the function declaration

(2) Don't repeat the default parameter(s) in the function definition

(3) Passes 29 to f()

(4) Passes 42 to f()

FAQ 2.24 What are the basics of inheritance and dynamic binding?

 

Inheritance is a powerful tool that enables extensibility. It allows the software to capture the is-a or kind-of relationship (although as will be shown in FAQ 7.01, the phrase, "is substitutable for," more accurately captures the true meaning of inheritance).

In the following example, class Vehicle is defined with = 0; after the declaration of the startEngine() member function. This syntax means that the startEngine() member function is pure virtual and the Vehicle class is an abstract base class, or ABC. In practice, this means that Vehicle is an important class from which other classes inherit, and those other derived classes are, in general, required to provide a startEngine() member function.

class Vehicle {
public:
  virtual void startEngine() = 0;
  virtual ~Vehicle();                                <-- 1
};

Vehicle::~Vehicle()
{
  // Intentionally left blank
}

(1) Destructors of ABCs are often virtual

The idea with ABCs is to build the bulk of the application so that it knows about the ABCs but not the derived classes. For example, the following function is aware of the ABC Vehicle but is not aware of any of the derived classes.

void f(Vehicle& v)
{
  // ...
  v.startEngine();
  // ...
}

If the ABCs are designed properly, a large percentage of the application will be written at that level. Then new derived classes can be added without impacting the bulk of the application. In other words, the goal is to minimize the ripple effect when adding new derived classes. For example, the following derived classes can be added without disturbing function f().

#include <iostream>
using namespace std;

class Car : public Vehicle {
public:
  virtual void startEngine();
};

void Car::startEngine()
{
  cout << "Starting a Car's engine\n";
}

class NuclearSubmarine: public Vehicle {
public:
  virtual void startEngine();
};

void NuclearSubmarine::startEngine()
{
  cout << "Starting a NuclearSubmarine's engine\n";
}

The reason these won't disturb the code in function f() (and recall, function f() represents the bulk of the application) is because of two features of C++: the is-a conversion and dynamic binding. The is-a conversion says that an object of a derived class, such as an object of class Car, can be passed as a base reference. For example, the following objects c and s can be passed to function f(). Thus the compiler allows a conversion from a derived class (e.g., a Car object) to a base class (e.g., a Vehicle reference).

int main()
{
  Car c;
  NuclearSubmarine s;
  f(c);
  f(s);
}

The is-a conversion is always safe because inheritance means "is substitutable for." That is, a Car is substitutable for a Vehicle, so it won't surprise function f() if v is in fact referring to a Car.

Dynamic binding is the flip side of the same coin. Whereas the is-a conversion safely converts from derived class to base class, dynamic binding safely converts from base class back to derived class. For example, the line v.startEngine() in function f() actually calls the appropriate startEngine() member function associated with the object. That is, when main() passes a NuclearSubmarine into f() (line f(s) in main()), v.startEngine() calls the startEngine() member function associated with class NuclearSubmarine. This is extremely powerful, since class NuclearSubmarine might have been written long after function f() was written and compiled and put into a library. In other words, dynamic binding allows old code (f()) to call new code (NuclearSubmarine::startEngine()) without the old code needing to be modified or even recompiled. This is the essence of extensibility: the ability to add new features to an application without significant impact to existing code. It is doable with C++, but only when the design considerations are carefully thought through ahead of time; it does not come free.

3/9/2009

Windows Embedded开发资源介绍

现在Windows Embedded的开发资源很多,但是对于初次进入这个领域的开发者来说,如何开始则成为一个很大的问题。下面,我们就来试着为Windows Embedded的开发资源进行一个整合。

Windows Embedded是什么

Windows Embedded是微软针对嵌入式领域推出的操作系统,目前主要包括三大产品:Windows Embedded CE、XP Embedded和.NET Micro Framework。

其中Windows Embedded CE可以适应多种CPU,比如ARM、MIPS、SH4和x86等,主要应用于手持设备、机顶盒、GPS和PMP等嵌入式设备中。基于Windows Embedded CE开发的Windows Mobile智能手机操作系统是专门针对智能手机的操作系统平台。

XP Embedded是基于XP Professional的组件化操作系统,以适应嵌入式设备对不同功能及存储空间的要求。XP Embedded只能运行在x86的CPU平台上,能够和Windows应用程序做到完全兼容。主要用于ATM、POS、电子信息亭等设备。

Windows Embedded for Point of Service是在XP Embedded的基础上开发的专门针对POS系统的操作系统,无需复杂的定制就可以直接应用于POS系统中。

除了以上的产品外,微软产品中还有两项技术与嵌入式产品相关:

l .NET Micro Framework

应用于便携式的个人数字化产品中的.NET平台,允许.NET托管代码运行在ARM等嵌入式平台上。最早来源于SmartWatch计划,早期名为SPOT(Smart Personal Object Tech)。

l Microsoft Robotics Studio

微软针对机器人领域开发的控制系统和开发工具, 可以使用可视化编程语言(VPL)或者.NET托管语言来编写机器人的控制指令。可以支持多种不同的机器人硬件平台。

获取开发工具

微软为开发者提供了免费的试用版软件,在产品开发的初始阶段,可以用试用版软件来验证,Windows Embedded产品是否适合自己的产品。

首先访问Windows Embedded的产品页面:

http://www.microsoft.com/windows/embedded/

点击左侧列表中的“Try Windows Embedded”。也可以直接访问下面的页面:

http://www.microsoft.com/windows/embedded/eval/trial.mspx

然后再Download the trial version中选择要下载的产品:

l Windows Embedded CE

l Windows XP Embeddeds

下载需要提供一个Live ID进行那个注册。

在下载完成后,点击页面上的“please register your evaluation version here”链接,进行注册获取Product Key,系统会将这个Product Key发送到你注册的邮箱中。在安装过程中,需要使用Product Key进行安装。

.NET Micro Framework的开发需要Visual Studio 2005的支持,除了Visual Studio 2005外,还需要安装.NET MF的SDK,我们可以在下面的链接中下载:

http://www.microsoft.com/downloads/details.aspx?FamilyId=32F5DF20-6C95-4FE8-A76C-0ED56A839AD2&displaylang=en

Microsoft Robotics Studio的开发工具是免费获取的,我们可以从下面的链接中下载:

http://msdn2.microsoft.com/en-us/robotics/aa731520.aspx

购买Windows Embedded

在中国大陆地区,如果需要购买Windows Embedded开发工具和Runtime的License可以联系三家Windows Embedded的分销商:

l 研华科技

l 联强国际

l Avnet

在Windows Embedded的中文主页中,可以找到更详细的分销商联系方式:

http://www.microsoft.com/china/windows/embedded/distrib.mspx

网络资源

l MSDN产品中心:

Windows Embedded

http://msdn2.microsoft.com/en-us/embedded/default.aspx

Windows Embedded CE

http://msdn2.microsoft.com/en-us/embedded/aa731407.aspx

Windows XP Embedded

http://msdn2.microsoft.com/en-us/embedded/aa731409.aspx

Windows Embedded for Point of Service

http://msdn2.microsoft.com/en-us/embedded/aa714298.aspx

.NET Micro Framework

http://msdn2.microsoft.com/en-us/embedded/bb267253.aspx

Microsoft Robotics Studio

http://msdn2.microsoft.com/en-us/robotics/default.aspx

l 英文开发网站:

WE-DIG

http://www.we-dig.org/

WindowsForDevices

http://www.windowsfordevices.com/

l 第三方开发网站:

博客园Windows Embedded频道

http://we.cnblogs.com/

嵌入式研究网

http://www.cnemb.com/

嵌入开发网

http://www.embed.com.cn/

Windows Mobile门户网站

http://www.winbile.net/

电子产品世界

http://www.eepw.com.cn/

开发社区

中文的开发论坛:

l 微软嵌入式开发者论坛

微软的官方开发者论坛,目前的版主是微软的嵌入式专家和微软最有价值专家(MVP)。

http://forums.microsoft.com/china/default.aspx?ForumGroupID=493&SiteID=15

l CSDN嵌入式开发论坛

最大的开发者社区,硬件/嵌入式开发板块中包括“嵌入开发(WinCE)”板块

http://community.csdn.net/

l 嵌入式研究网论坛

偏重于Windows Embedded相关技术的讨论,也包括Windows Mobile应用程序开发。

http://www.cnemb.com/forum/

l 嵌入式开发网技术论坛

偏重于硬件开发方面的讨论,不仅限于Windows Embedded的讨论

http://www.embed.com.cn/bbs/index.asp

l Windows Mobile开发者社区

CSIP创建的开发者讨论社区

http://www.winbile.net/BBS/

l 电子产品世界论坛

http://forum.eepw.com.cn/forum/main

有一些问题还是需要去英文论坛问的:

l Smart Device Development

http://forums.microsoft.com/MSDN/default.aspx?ForumGroupID=11&SiteID=1

l Microsoft Robotics Studio

http://forums.microsoft.com/MSDN/default.aspx?ForumGroupID=383&SiteID=1

Webcast

Windows Embedded从入门到精通课程:

XP Embedded开发初体验

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032358662&EventCategory=4&culture=en-US&CountryCode=US

Windows CE下的开发概述

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032358690&EventCategory=4&culture=en-US&CountryCode=US

Windows CE 内存泄漏的检测和防止

http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032361286&amp;Culture=zh-CN

Windows CE 5.0/Windows Mobile调试与性能优化

http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032361320&amp;Culture=zh-CN

本系列的新课程,请关注:

http://www.microsoft.com/china/msdn/events/webcasts/shared/Webcast/MSDNWebCast.aspx

Windows嵌入式开发系列课程

http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series/WindowsCE.aspx

英文的Windows Embedded Webcast可以在下面的链接中找到:

http://msdn2.microsoft.com/en-us/embedded/aa731227.aspx

BLOG

l 英文产品组BLOG:

Mike Hall’s Blog

http://blogs.msdn.com/mikehall/

Windows CE Base Team Blog

http://blogs.msdn.com/ce_base/

XP Embedded Team Blog

http://blogs.msdn.com/embedded/

.NET Micro Framework Team Blog

http://www.dotnetmicroframework.com/

Microsoft Robotics Studio Blog

http://blogs.msdn.com/MSRoboticsStudio/

l 中文BLOG方面:

微软中国嵌入式开发者博客

http://blogs.msdn.com/yunxu/

凌宁的博客

http://blogs.msdn.com/ningling/

开发图书

Programming Windows Embedded CE 6.0 Developer Reference, 4th Edition

Programming Windows® Embedded CE 6.0 Developer Reference

作者:Douglas Boling

出版社: Microsoft Press; 4 edition (October 10, 2007)

语言: English

ISBN-10: 0735624178

Windows CE实用开发技术

Windows CE实用开发技术

作 者:张冬泉 谭南林 王雪梅 焦风川

出 版 社: 电子工业出版社

书 号: 7121024527

出版日期: 2006 年4月

 Windows CE嵌入式系统

Windows CE嵌入式系统

作 者:何宗键

出 版 社: 北京航空航天大学出版社

书 号: 7810777939

出版日期: 2006 年9月

 

Embedded Programming with the Microsoft .NET Micro Framework

作者:Donald Thompson , Rob S. Miles

出版社: Microsoft Press (June 20, 2007)

语言: English

ISBN-10: 0735623651

Windows XP Embedded Advanced

Windows XP Embedded Advanced

作者:Sean D. Liming

出版社: Annabooks/Rtc Books; Pap/Cdr edition (October 1, 2003)

语言: English

ISBN-10: 0929392779

Professional Microsoft Robotics Studio

Professional Microsoft Robotics Studio(预订中)

作者:Martin R. Calsyn

出版社: Wrox (June 3, 2008)

语言: English

ISBN-10: 0470141077

Programming Microsoft® Robotics Studio

Programming Microsoft® Robotics Studio (PRO-Developer)(预订中)

作者:Sara Morgan

出版社: Microsoft Press (March 5, 2008)

语言: English

ISBN-10: 0735624321

 
by 
by 
by 
by 
by 
by 
by 
by 
by 
by 
by 
by 
by 
by 
by 
by 
Photo 1 of 4
感谢访问!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.
冰苓崛烬wrote:
你好!
我叫戴冰清,现在在德国慕尼黑读大学(本科),毕业后想去新加坡实习半年左右,主要想请教一下在那里的消费水平,不知那里普通学生的生活水平一个月大约要多少生活费(包括吃住)?比较在意房租啦,我在国外房子是不是很难找啊?我的邮箱是bingqingdai@googlemail.com,希望能抽空指点一下,谢谢啦!
Mar. 21
丹波wrote:
您好,我是浙江大学本科大三软件工程专业的学生。现在我们学院有去NTU的交流项目。我想申请去NTU交流。在看NTU的实验室项目介绍时发现对 T-engine方面的东西比较感兴趣。在google搜索就搜到了您的博客。
我想请教您一些关于NTU的老师,研究课题还有在NTU的生活等等情况。您能否帮助我?可以的话加我的MSN好吗?MSN:bobounha1987@hotmail.com
Apr. 8
莎丽 罗wrote:
即将成为常客~哈哈!
Nov. 28