Microsoft Micro Framework 3.0對Serial Peripheral Interface 的支持
在3.0的Micro Framework中,咱可以使用SPI(Serial Peripheral Interface)來和外圍設備進行通信了。SPI是一種串口總線系統,和I2C,CAN,USB一樣。
使用SPI來進行串口通信中,從設備的通訊模式如下:
兩個數據口,一個進一個出,另外兩個控制口。在標準SPI通信模式中,設備分為master設備和slave設備。Master設備決定clock信號和線路狀態。多個slave設備之間可以串聯:

上圖里面,這些串聯的設備看起來象是一個設備,也可以這樣連接:

SPI Master的CPOL 和 CPHA分別改變0和1的狀態,就可以對應到SPI Device的四個狀態:
|
SPI-Mode |
CPOL |
CPHA |
|
0 |
0 |
0 |
|
1 |
0 |
1 |
|
2 |
1 |
0 |
|
3 |
1 |
1 |
所以在Microsoft.SPOT.Hardware.SPI的實現中,就包含了以上四種狀態。
另外,外圍設備有很多中,主要可以分為下面五種類型:
1. Converters (ADC and DAC)
2. Memories (EEPROM and FLASH)
3. Real Time Clocks (RTC)
4. Sensors (temperature, pressure)
5. Others (signalmixer, potentiometer, LCD controller, UART, CAN controller, USB controller, amplifier)
前三種外圍設備是最多的,后面兩種就少多了。那什么時候適用SPI來進行通信呢?
存儲設備,主要是EEPROM的變種,也有一些少量的SPI存儲設備。容量從幾個bits到64Kbit不等。時鐘頻率可以到3MHZ。串行的EEPROMS SPI可以提供2.7V到5V的電壓,同時,保存的數據可以從10到100年。每個組件,可以讀寫1000000次以上。
RTCs是比較適合用SPI來進行通信的。因為只有少量的數據需要傳輸。
OK,最后看看Microsoft的MF種實現的對SPI的支持為咱提供了什么功能:
Microsoft.SPOT.Hardware.SPI
public sealed class SPI : IDisposable
{
// Fields
private Configuration m_config;
private OutputPort m_cs;
private bool m_disposed;
// Methods
public SPI(Configuration config);
[MethodImpl(MethodImplOptions.Synchronized)]
private void Dispose(bool fDisposing);
protected override void Finalize();
[MethodImpl(MethodImplOptions.InternalCall)]
public extern void InternalWriteRead(byte[] writeBuffer, byte[] readBuffer, int readOffset);
[MethodImpl(MethodImplOptions.InternalCall)]
public extern void InternalWriteRead(ushort[] writeBuffer, ushort[] readBuffer, int readOffset);
public void Write(byte[] writeBuffer);
public void Write(ushort[] writeBuffer);
public void WriteRead(byte[] writeBuffer, byte[] readBuffer);
public void WriteRead(ushort[] writeBuffer, ushort[] readBuffer);
public void WriteRead(byte[] writeBuffer, byte[] readBuffer, int readOffset);
public void WriteRead(ushort[] writeBuffer, ushort[] readBuffer, int readOffset);
// Properties
public Configuration Config { get; set; }
// Nested Types
public class Configuration
{
// Fields
public readonly bool ChipSelect_ActiveState;
public readonly uint ChipSelect_HoldTime;
public readonly Cpu.Pin ChipSelect_Port;
public readonly uint ChipSelect_SetupTime;
public readonly bool Clock_Edge;
public readonly bool Clock_IdleState;
public readonly uint Clock_RateKHz;
public readonly SPI.SPI_module SPI_mod;
// Methods
public Configuration(Cpu.Pin ChipSelect_Port, bool ChipSelect_ActiveState, uint ChipSelect_SetupTime, uint ChipSelect_HoldTime, bool Clock_IdleState, bool Clock_Edge, uint Clock_RateKHz, SPI.SPI_module SPI_mod);
}
public enum SPI_module
{
SPI1,
SPI2,
SPI3,
}
}
Lbq1221119@cnblogs.com Friday, December 05, 2008
posted on 2008-12-05 23:23 lbq1221119 閱讀(2102) 評論(2) 收藏 舉報
浙公網安備 33010602011771號