香蕉派 I2C点亮OLED
香蕉派 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(uint8_t) + 1] = {0};data.nmsgs = 1; //消息的数目data.msgs[0].len = 2;//1个写入目标的reg地址和1个数据data.msgs[0].addr = 0x78;//i2c设备地址data.msgs[0].flags = 0;//flags为0:表示写;为1:表示读.data.msgs[0].buf = sendbuf;//申请内存为2个Bytedata.msgs[0].buf[0] = 0x00;//i2c设备要操作的reg地址data.msgs[0].buf[1] = 0x00;//向reg写入的值ioctl(fd,I2C_RDWR,(uint64_t)&data);
}
2 然后测试香蕉派是否可以和oled通信。这里我犯了一个傻,直接将香蕉派的I2C管脚和逻辑分析仪连接,然后发现发送的信号永远只有地址,没有下文了。然后才反应过来,I2C每发送一位,都需要一个ack的确认信号,我没有和oled相连,就没有信号确认,香蕉派就不会继续发送数据。于是将香蕉派和oled连接上,然后在SCL和SDA中引出一根线连接逻辑分析仪。
3 接下来又是一个坑,具体是这样的:我查看卖家的51单片机程序,他是通过GPIO口模拟IIC通信协议实现的,他在发送每位时发送的从机地址位0x78,于是我在程序中也设置地址位0x78,结果oled并没有反应,逻辑分析仪显示波形如下:
4 折腾了一下午,直到看到这篇博客:为什么i2c从机地址要左移一位。i2c每次发送8位,最后一位为读写控制位,也就是说7位的地址需要左移一位才可以被正确的识别。那么问题又来了,为什么逻辑分析中显示发送的地址为0xF0呢。在网上查阅到SSD1306的IIC地址位0x3C,也就是说单片机程序已经将0x3C左移了一位变成了0x78,为什么从机还是不应答呢,根据逻辑分析仪可以发现,linux内核中肯定已经左移了一位,所以0x78变成了0xF0。那么只需要填入原来的地址即可,也就是0x3C。最后,成功通信:
5 后面就没什么好说的了,单片机程序没什么地方需要改动,直接复制过来,改一下代码风格就是自己的了,最后成功点亮。
香蕉派 I2C点亮OLED相关推荐
- 香蕉派BPI-M6 采用深蕾半导体Vs680芯片设计,板载4G LPDDR4和16G eMMC存储
Banana PI BPI-M6 香蕉派BPI-M6是香蕉派社区在2022年推出的新一代单板计算机,它采用深蕾半导体(Synaptics) VS680四核Cortex-A73 (2.1GHz)和一个C ...
- 香蕉派开源硬件开发板 Banana Pi BPI M2Pro Amlogic S905X3 主板
Banana Pi BPI-M2 Pro是Banana Pi公司于2021年推出的下一代单板机.它采用Amlogic S905X3四核Cortex-A55 (2.0 XXGHz)处理器.板载2GB L ...
- Xen和香蕉派的故事
这篇文章将介绍如果在bananapi M1+上运行虚拟化系统XEN. 1. 准备bananapi 的环境 制作可以启动的sd卡. wget https://dl.bananian.org/releas ...
- 香蕉派 banana pi github 最新Linux 代码升级到kernel 4.2.
2019独角兽企业重金招聘Python工程师标准>>> 香蕉派 banana pi github 最新Linux 代码升级到kernel 4.2. https://github.co ...
- 香蕉派安装64位linux,在香蕉派里安装配置archlinux到树莓派
把TF卡通过读卡器插入到香蕉派中,sdX是SD卡盘符.以下操作在香蕉派shell中完成 一.SD卡分区 使用fdisk 工具$ fdisk /dev/sdX 在fdisk 提示命令下删除旧分区并新建: ...
- 香蕉派路由功Openwrt、Android功耗对照測试
路由这个东西是要长期通电使用的,所以功耗也是须要关注的.如今香蕉派路由已经有了openwrt和android两个 系统,这两个系统的功耗是否一样呢? 測试工具:QUIGG的德国产功耗測试仪一个.手机充 ...
- Banana PI 香蕉派项目
2019独角兽企业重金招聘Python工程师标准>>> (一) 产品背景和市场趋势 香蕉派产品是结合市场现有开源硬件平台的优缺点的基础上为开源硬件及电子创新爱好 ...
- stm32单片机屏幕一直闪_STM32使用HAL库函数点亮OLED
OLED屏幕应用十分广泛,我们可以使用STM32单片机对其进行控制,使其显示我们需要的各种数字.字母.汉字.图画等.我们此次使用下图这款非常普遍的0.96寸OLED液晶屏.此款OLED屏采用IIC的通 ...
- 香蕉派(or 皮?)上手初体验 -- 外观鉴赏,安装,配置amp;总结
一.前言及简单介绍 听到"派"或者是看到这幅图片.难免让你想到眼下大名鼎鼎的"树莓派". 而香蕉派(Banana Pi. 论坛上也有人称它香蕉皮)是一款国产的比 ...
最新文章
- PHP分布式链路追踪,SkyWalking:分布式架构链路追踪-SkyWalking介绍
- Django(一):项目中urls.py文件中path()函数的说明及应用
- 错误fatal error: zlib.h: 没有那个文件或目录的解决办法
- Hadoop入门(十九)Mapreduce的最大值程序
- ResourceBundle 读取properties文件中文乱码
- Windows 2016 安装单机版本Oracle ASM 的简单说明
- HP DV3 笔记本 重装系统
- 用Redis实现分布式锁 与 实现任务队列
- DB2事务日志使用经验
- 华铭智能属于芯片概念吗_华铭智能:子公司1个亿参股边缘计算独角兽九次方大数据!...
- HTML5汽车赛道飙车游戏免费源码下载
- unity3d 各种优化综合
- jsp允许跨域访问_如何解决js跨域问题
- I.MX6UL主板TF卡启动Linux的实现(一)-TF卡的简要介绍及供电的实现
- work-stealing调度算法
- 汉洛塔问题的递归解决方法
- 9. JVM-方法区
- Linux 终端 基本指令
- 如何配置一台以机器学习、深度学习为用途的工作站?
- USB Network Gate SDK Crack,构建USB Network Gate的技术
热门文章
- 记忆测试系统java代码_记忆测试系统-JAVA实现
- 惠普Zx40工作站u盘启动
- @所有人:我写这份寄语是希望您们在IPFS的事业里面有所成就!
- 利用Python计算移动平均值
- java 9宫格抽奖_原生JS实现九宫格抽奖
- 数据分析实战——日化用品在门店的销售分析
- 中式装修设计,诗意古韵,尽显悠悠东方风骨
- 用友U8 All-in-One倡导企业管理信息化的“天龙八部”
- 鸿蒙系统怎么还不能更新,为什么还更新不了鸿蒙_为什么不能更新鸿蒙系统
- 【CS144 fa20 笔记】手摸手教你写一个TCP协议