在之间的博客中已经讲了如何阅读一本datasheet并编写Verilog驱动代码,而在这篇博客中就加以应用,为PCF8574 IO扩展板编写驱动并观察效果,至于为什么选择这个,一方面是因为这个芯片功能简单,可以作为初次实践的练习对象;另一方面是如果你使用过正点原子的阿波罗开发板的话,你就会看到上面的很多信号都连在这个扩展芯片上面的,因此编写驱动也对使用STM32有好处



有了上一篇的基础,我们就对datasheet和板子的分析做个简短些,重点在于驱动代码的编写和效果的验证

参考:

FPGA零基础学习:IIC协议驱动设计

I2C - 集成电路之间的同步、半双工数据传输

I2C Master

在编写代码前的分析

先看看芯片的引脚:



可以看到芯片有多种封装形式,不过功能都是一样的

  • A[2:0]:地址输入
  • INT:中断输出,当在输入模式下输入引脚有上升沿或下降沿时中断发生
  • P[7:0]:P端口输入输出
  • SCL,SDA:IIC时钟线和数据线

其次看一下一些参数,在使用中要注意一下:





一些供电参数,接Vcc的时候要注意一下

然后看一下时序图,编写驱动就是要参考这个:

最后看一下芯片的功能实现:





可以看到IIC的地址是由A[2:0]决定的,我们所采用的模块中是通过跳线帽来决定A[2:0]的高低电平的:

编写Verilog驱动

Verilog驱动代码编写如下:

程序的状态转移图如下:

逻辑分析仪的使用

逻辑分析仪可以用来分析时序,这里就介绍一下我使用的逻辑分析仪,并对上文中的编写的代码进行时序分析

我使用的逻辑分析仪是NanoDLA逻辑分析仪,比较便宜的同时可以分析一些基本时序,适用于初学者:

  • 最高24MHz采样率
  • 8通道可同时采样
  • 支持输入电压[-0.5v,5.25v],其中低电平为[-0.5v,0.8v],高电平为[2v,5.25v]

最新文章

  1. Express URL跳转(重定向)的实现
  2. 剑指Offer面试题:20.栈的压入、弹出序列
  3. 王爽<<汇编语言>> 实验十四
  4. CentOS7安装图形界面和修改运行级别
  5. 【Android】EventBus 源码解析
  6. spring源码学习之:spring容器的applicationContext启动过程
  7. Linux命令(20)linux服务器之间复制文件和目录
  8. https://google-developers.appspot.com/chart/
  9. Android 将文件保存到SD卡,从卡中取文件,及删除文件
  10. python3.x 学习心得
  11. 【Linux C中文函数手册】文件内容控制函数
  12. spoj 416
  13. C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(下)
  14. Android Weekly Notes Issue #253
  15. 每个国家对应的语言Locale和国家代码对照表
  16. 使用ztree展示树形菜单结构
  17. python中删除某个元素的3种方法
  18. 数据泵expdp 在rac环境下 paralle 的处理方法
  19. ThinkPHP5基础学习(慕课版)
  20. Highcharts之折线图

热门文章

  1. flask相关
  2. 面向对象基础之基础—控制台C#模拟银行ATM存取操作实例
  3. Android中添加set文件
  4. java运算符相关学习
  5. vue中vue2-google-maps使用谷歌地图的基础操作
  6. MySQL Galera cluster 集群常用参数说明
  7. ps如何正确擦除文字 如何正确用ps擦除文字
  8. jumpserver运行源码
  9. 【windows】 进程间通信 WM_COPYDATA消息
  10. [Notes-DS-2]线性结构