IoTCore I2C
10256 단어 Windows10IoTCore
전제 조건
방법
1. 사용된 I2C 컨트롤러의 장치 ID를 가져옵니다.
string aqs = I2cDevice.GetDeviceSelector(friendlyName);
var dis = await DeviceInformation.FindAllAsync(aqs);
// dis[0].Id がデバイスID
구체적인 값은 이것이다."\?\ACPI#MSFT8000#1#{a11ee3c6-8421-4202-a3e7-b91ff90188e4}\I2C1"2. I2C에 연결된 장치 인스턴스를 생성합니다.
주소로부터 실례를 생성합니다.
종속 주소를 지정해야 합니다.
버스 속도 및 공유 모드를 지정할 수 있습니다.
var device = await I2cDevice.FromIdAsync(dis[0].Id, new I2cConnectionSettings(0x6b) { BusSpeed = I2cBusSpeed.FastMode, SharingMode = I2cSharingMode.Exclusive, });
3. 장치를 실행하는 방법.필요에 따라 Write/Read/WriteRead 방법을 실행합니다.
WriteRead 방법은 Write 다음에 Restart Condition에서 읽는 것입니다.
device.Write(new byte[] { 0x20, 0xc0, });
var data = new byte[6];
device.WriteRead(new byte[] { 0x28 }, data);
Write 메서드의 물결.WriteRead 메서드의 물결.
염두에 두고 조사하는 일
공유 모드의 Exclussive는 어떤 단위로 배타적입니까?
주소 단위로 배타적이다.
예를 들어, Exclussive는 종속 주소 0x6b와 0x6c를 모두 생성할 수도 있습니다.주소 0x6b와 0x6b에서는 사용할 수 없습니다.다음 반환 값이 비어 있습니다.
공유 모드의 Exclussive가 Shared보다 빠릅니까?
여분의 처리가 없으니 빠르지 않습니까?나는 통신 시간을 측정했지만 뚜렷한 차이가 없다고 생각한다.
장치 단위로 버스 속도를 지정할 수 있습니다. 즉, 같은 I2C 버스에 혼합할 수 있습니까?
네.
Shared에서 버스 속도가 다른 장치의 실례를 만들어 운행해 본 결과 각자 지정한 버스 속도로 통신을 진행했다.
좀 편해요.
100K/400K 블렌드 파형.
샘플 코드
private void Page_Loaded(object sender, RoutedEventArgs e)
{
Task.Run(I2cTask);
}
private async Task I2cTask()
{
var device = await GetI2cDevice("I2C1", 0x6b, I2cBusSpeed.FastMode);
device.Write(new byte[] { 0x20, 0xc0, }); // CTRL_REG6_XL = 0b11000000
var data = new byte[6];
for (;;)
{
device.WriteRead(new byte[] { 0x28 }, data); // OUT_X_XL, OUT_Y_XL, OUT_Z_XL
Debug.WriteLine("{0} {1} {2}", BitConverter.ToInt16(data, 0), BitConverter.ToInt16(data, 2), BitConverter.ToInt16(data, 4));
}
}
private async Task<I2cDevice> GetI2cDevice(string friendlyName, int slaveAddress, I2cBusSpeed busSpeed = I2cBusSpeed.StandardMode, I2cSharingMode sharingMode = I2cSharingMode.Exclusive)
{
string aqs = I2cDevice.GetDeviceSelector(friendlyName);
var dis = await DeviceInformation.FindAllAsync(aqs);
return await I2cDevice.FromIdAsync(dis[0].Id, new I2cConnectionSettings(slaveAddress) { BusSpeed = busSpeed, SharingMode = sharingMode, });
}
Reference
이 문제에 관하여(IoTCore I2C), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matsujirushi/items/44b29a5bda030f896ccc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)