Linkit Smart MT7688 I2C PCF8563使用教程

本文是參照了 stone8761 的一篇文章
我想在Linkit Smart MT7688上使用I2C訪問PCF8563,使用的內核版本OpenWrt,chaos_calmer
15.05固件,該固件可以直接在/dev下看到i2c-0該文件節點,所以可以忽略內核修改部分。
直接修改dts文件即可,dts文件位置/home/wei/openwrt/target/linux/ramips/dts/LINKIT7688.dts
/home/wei/應換成自己的目錄。
找到dts文件的palmbus@10000000,裏面有

i2c@900 {
	status = "okay";
	};

修改爲

i2c@900 {
	status = "okay";
	rtc@51 {
		compatible = "nxp,pcf8563";
		 reg = <0x51>;
	};
};

PCF8563文檔中指出寫地址爲0xA2,讀地址0xA3。linux識別的地址範圍是0x03~0x77(i2ctools ./i2cdetect -r -y 0測出)。0xA2右移一位後即是0x51。
make V=s編譯固件後即可訪問i2c-0
測試代碼:

#include <linux/i2c-dev.h>
void main(void)
{
    int fd;
    fd= open("/dev/i2c-0", O_RDWR);
	if(fd< 0)
	{
		printf("“open”\n");
	}
	ioctl(fd, I2C_SLAVE, (0xA2 >> 1));//0x0703
	unsigned char buf;
	unsigned char addr = 0x02;//02爲PCB8563的秒寄存器,每次讀取都會看到變化
	write(fd,&addr, 1);
	read(fd,&buf, 1);
	printf("[%2d]\n", buf);
}

上述博客中提到的I2C_SLAVE(作者筆誤寫成了IIC_SLAVE)定義問題,在這個頭文件內#include <linux/i2c-dev.h>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章