ZYNQ 使用EMIO实现I2C通信驱动OLED屏幕显示(SSD1306)

        最近需要使用OLED显示屏,不过FPGA开发板并未留有I2C通信的MIO引脚,很尴尬,只能使用EMIO引脚,使用过程中由于对I2C通信不熟悉也遇到了不少问题,这里分享一下实现的过程,具体的I2C协议自行学习理解。

        首先,之前使用过STM32F107来驱动这块0.96寸的小屏幕,不过当时主要是在跟着大神操作,所有的驱动代码都是照搬的,不过能使用就行了,现在在FPGA上实现主要的问题有:

        1.如何使用EMIO作为SDA及SDL引脚。

        2.驱动如何修改。

        关于第一个问题,其实也不难,首先打开block design ,双击zynq,打开外设IP引脚界面,勾选I2C使用EMIO引脚,如图。

        注意,如果有MIO引脚,就根据原理图自行找到MIO引脚对应的位置,我这里没有所以选用EMIO。

        然后点击ok,在zynq核上把I2C引脚引出。

        这样就完成了引脚配置,之后,先运行一下检查。

        没问题之后,点击Generate Block Design

        完成后就能在程序文件中看到更新了引脚。

        这时,就可以更新顶层文件中的引脚,将这两个引脚从PL引脚输出,注意时inout类型。

        接下来就需要进行引脚约束了,这里注意,因为我们硬件上没有上拉电阻,一定要约束时把引脚做上拉处理。

        这里就完成了vivado部分,可以编译导出bit流文件了。

        

        接下来第二个问题,如何修改驱动来在sdk中使用,这里说明一下修改的原因,因为通信的方式不一样,在32中,我们时直接操作引脚电平变化来进行通信的,而sdk中提供了发送接收数据的函数,大大的简化了程序开发过程,对我们而言需要关心的是如何使用这些函数以及怎么去发送命令和数据。

        这里我参考的这篇文章中的驱动程序,当然,这是32上使用的,不过整体的流程我们可以好好学习一下。

        【STM32】STM32学习笔记-OLED显示屏(10)_32*32 oled程序-CSDN博客

        这里给博主点个赞,有需要学习stm32的可以关注这位博主,B站也有教学视频,不多说了。

        接下主要是对驱动进行修改,这里要注意一点,在32中从机地址为0x78,但是由于sdk中提供的发送函数会自动的把地址左移一位,因此地址应为0x3c

        我的经验来说,发送命令和数据的话建议一个字节一个字节发送,不要一次发送太多字节,可能会导致屏幕无法正常使用,然后就是每次发送命令或者写数据的话可以加个20us的延迟。

        在这里大家可以先尝试自己修改,可能出问题的点已经都说明了,应该不会有问题,具体的驱动如何修改后续有机会再写一篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值