網路上找到的,Raspberry Pi2 Model B 40 Pin GPIO接腳圖,其中:GPIO3為 I2C SDA1,GPIO5 為 I2C SCL1,GPIO9為 GND
找到的資料有提及:
電流輸出的限制:每個接腳輸出最大為16mA,全部接腳同時最大輸出為50mA
GPIO為3.3V準位
pi@raspberrypi:~ $ lsmod (檢查系統所載入的module)
Module Size Used by
….
i2c_bcm2708 4834 0
…
i2c_dev 5859 0
pi@raspberrypi:~ $ sudo i2cdetect –l (列舉出系統上的I2C裝置)
i2c-1 i2c 3f804000.i2c I2C adapter
pi@raspberrypi:~ $ sudo i2cdetect -y 1 (列出可用的slave address)
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- 14 -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- 55 -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0x31
pi@raspberrypi:~ $ sudo i2cget -y 1 0x55 0x2d (讀取SOC
high bte)
0x00
pi@raspberrypi:~ $ sudo i2cdump -y 1 0x55
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 00 00 00 00 ff 7f a6 0b 2a 0f c0 01 34 05 9f
0a .....???*???4???
10: 34 05 9f 0a 00 00 ff ff 00 00 00 00 ff ff 00
00 4???............
20: ff ff 79 04 00 00 ff ff a6 0b 00 00 31 00
64 00 ..y?....??..1.d.
30: 00 00 34 05 00 00 00 00 00 00 00 00 be 0a 78
94 ..4?........??x?
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 ................
60: 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00
00 ........ .......
70: 00 00 c3 0b 00 00 55 00 00 00 00 00 00 00 00
00 ..??..U.........
80: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXXXXXXXX
90: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXXXXXXXX
a0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXXXXXXXX
b0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXXXXXXXX
c0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXXXXXXXX
d0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXXXXXXXX
e0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXXXXXXXX
f0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXXXXXXXX
安裝 libi2c-dev (sudo apt-get install
libi2c-dev)
有安裝就可使用 i2c_smbus_read_word_data 等眾多function,不然只有簡單
read/write 可用
如果有用 python,安裝 python-smbus
C的程式如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
int file_i2c;
int length;
unsigned char buffer[100]={0};
char
*filename=(char *)"/dev/i2c-1";
//open the bus
if((file_i2c=open(filename,O_RDWR))<0)
{
printf("Failed to openthei2c
bus\n\r");
return 0;
}
else
printf("open /dev/i2c-1
ok!\r\n");
//setup slave address
int addr=0x55;
if(ioctl(file_i2c,I2C_SLAVE,addr)<0)
{
printf("Failed to acquire
bus acess and/or talk toslave");
return 0;
}
else
printf("setup slaveaddress
to 0x55 ok!\r\n");
length=2;
if(read(file_i2c,buffer,length)!=length) //not useful
{
printf("Failed to read from i2c bus\r\n");
return 0;
}
else
printf("Data read:%x
%x\r\n",buffer[0],buffer[1]);
int dat;
dat=i2c_smbus_read_word_data(file_i2c,0x3e);
if(dat<0)
{
printf("read
failed\r\n");
}
else
{
printf("Data read:%lx
\r\n",dat);
}
printf("finish\n\r");
close(file_i2c);
return 0;
}
不錯的參考資料
(1)
安裝編譯C/C++
[How To
Raspberry Pi] 安裝 GCC
Raspberry Pi:在Pi 2與 Raspbian 上安裝NetBeansIDE,撰寫Java與C++ 程式
(2)安裝/啟動 I2C driver
I2C Installation for Raspberry Pi – Step by Step Guide
讓你的Raspberry Pi透過I2C讀取EEPROM
(3)參考文章:
Raspberry Pi:如何更新Raspbian
Raspberry
Pi:Raspbian套件列表
Raspberry Pi安裝中文環境
http://yehnan.blogspot.tw/2012/08/raspberry-pi.html
黑傑克的筆記
I2C Drivers, Part I
Interfacing an I2C
GPIO expander(MCP23017) to the Raspberry Pu using C++(i2Cdev)
Using the I2C interface
沒有留言:
張貼留言