香蕉派 I2C点亮OLED
最近比赛项目需要在香蕉派上利用oled显示收到的数据,于是淘宝买了一块0.91寸、IIC驱动的oled屏幕,然而店家只提供了一份51单片机的驱动程序,需要自己移植到香蕉派上,踩了一些小坑,记录一波。
实验器材:
- 一块BPI M64的板子,系统为Ubuntu 16.04.3 LTS
- 0.91寸OLED模块,控制芯片为SSD1306
- 逻辑分析仪
实验步骤
- 首先测试香蕉派的IIC通信是否正常,系统dev目录下已有两个设备i2c-0、i2c-1。只需要写用户态的程序就可以了,查看M64的管脚图可以看到确实有两个,一个在3、5脚;一个在27、28脚。
那么只有分别尝试一下了,利用逻辑分析仪查看那个管脚有波形就可以了,不赘述。这里发现对i2c-1写入时3、5脚有波形,看来这两个是对应的。程序如下:
int fd = open("/dev/i2c-1", O_RDWR);
if (fd < 0)
{
printf("i2c open failed\n");
return -1;
}
struct i2c_rdwr_ioctl_data data;
data.msgs = (struct i2c_msg *)malloc(2 * sizeof(struct i2c_msg));
uint8_t sendbuf[sizeof(uin