?? i2c通信.txt
字號:
I2C通信
作者:iexcy
差不多把vckbase.com里CE相關的文章都看完了,但是沒有看到與I2C相關的文章。由于我現在所做的是CE下I2C通信,所以把自己總結的經驗給大家分享一下。PS:其實在這條路上我也是新手一個。
現在大多數的CE系統都對穩定性和速度的要求及高,所以I2C通信快速和穩定性是它在CE系統上運用非常廣泛,至少我現在所從事的項目和我所知道的項目很多的地方都運用到了I2C接口。
I2C的驅動是按照流驅動來做的,所以對I2C上的設備進行操作時和對串口的讀寫操作一樣非常簡單,用的是createfile,writefile,readfile,不同的地方就是要用DeviceIoControl來設置波特率,主從模式和寄存器的模式,這些相應的值CPU的生產廠家會給你。最重要的是要真正了解自己所操作的設備的I2C協議,那對設備操作起來就相當的容易了。
其實我是學純軟件的,剛接觸I2C這個東西時是真的一問三不知,但當我在和I2C打交道一年之后發現,I2C真是一個通用的東西,只要支持I2C的硬件設備在CE下都可以用相同的代碼去進行操作。這里相同的代碼的意思是說形式完全一樣,具體的操作命令值就要仔細閱讀設備的I2C協議了。請大家不要誤解。
一:打開I2C接口:
hT2C = CreateFile(TEXT("I2C1:"),
GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (hT2C == INVALID_HANDLE_VALUE)
{
if (GetLastError() == ERROR_DEV_NOT_EXIST)
{
// register I2C device driver
hDriver = RegisterDevice(TEXT("I2C"), 1, TEXT("I2C.DLL"), 0);
if (!hDriver)
{
RETAILMSG(1, (TEXT("Failed to register I2C device driver.\r\n")));
}
hT2C = CreateFile(TEXT("I2C1:"),
GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
}
if (hT2C == INVALID_HANDLE_VALUE)
{
dwErrorCode = GetLastError();
return dwErrorCode ;
}
}
//set mode: master
dwIoControlCode = I2C_MASTER_MODE;//這個值CPU廠家給
DeviceIoControl(hT2C, IOCTL_I2C_SET_MODE,
(PVOID)&dwIoControlCode, sizeof(DWORD), NULL, 0, &dwRet, NULL);
//set baudrate:
DeviceIoControl(hT2C, IOCTL_I2C_SET_BAUDRATE,//dwData CPU廠家給
(PVOID)&dwData, sizeof(DWORD), NULL, 0, &dwRet, NULL);
//set buffer mode: single
dwIoControlCode = I2C_SINGLE_STAGE;
DeviceIoControl(hT2C, IOCTL_I2C_SET_BUFFER_MODE,//dwIoControlCode CPU廠家給
(PVOID)&dwIoControlCode, sizeof(DWORD), NULL, 0, &dwRet, NULL);
二:寫I2C數據 //寫校驗碼
WriteFile ( hT2C, BUFFER, writesize, &wRetSize, NULL);
//判斷存儲是否成功
if (!wRetSize)
{
dwErrorCode = GetLastError();
CloseHandle( hT2C );
return 1;
}
這里得說明一下,writefile的第5個參數必須為NULL,因為CE系統是不支持重疊的。writefile是BOOL型的,剛開始我用writefile的返回值來判斷操作是否成功,結果判斷結果根本不準確,用writefile完成之后實際寫的大小來判斷操作是否成功才是最準確的。
讀操作和寫操作基本一樣,就不詳細說明了。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -