• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

i2c

ba8926b2668f2159 2019-01-23 浏览量:864
有没有大佬精通i2c和spi,来个简单深刻的介绍呗(包括有什么用,怎么用)俺学通信贼头疼,大佬(鼠)带带我
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • eeprom 读写,这个是比较简单的 iic 通信器件,单片机使用 io 口模拟 iic 时许,做个 读写 eeprom 的程序,做一次就会了,会的很彻底。

    iic  spi  都是小协议,很简单,猛学两天就会了。

    感觉也没啥说的,就是控制 scl sda 两条线,产生 IIC 启动信号,终止信号,发送数据,应答位。完全按照 iic 时序产生波形,把这些基本信号封装起来。

    然后调用这些封装好的 iic 时许波形去 完成 eeprom 的读写控制。

    先启示,然后发送地址+读写位。然后发送的话就继续,发送一个字节等应答,继续发送继续等应答......  一般第一个字节是地址,第二个字节是数据.... 这个看eeprom 的读写时许。

    接受的话,要中止后,重新起始,读一个字节,应答,继续读继续应答, eeprom 读写看 eerpom 手册的读写时许,不难就是有点复杂。

    写代码的时候,分层,封装好。越往上写代码越清晰。

    一句话概括就是,用代码实现手册描述的功能。或者把手册描述的功能翻译成代码实现。

    spi 更简单。

    • 发布于 2019-01-23
    • 举报
    • 评论 0
    • 4
    • 0

其他答案 数量:14
  • IIC:

    发送一个字节

    两条线,一条时钟CLK、一条数据IO

    在时钟线是高的时候拉低IO(数据线),表示开始传输,然后传输8位。在时钟线是高的时候拉高IO,结束8位传输

    常见的IIC协议,通常一次发送3个8位(三个字节)

    器件地址、寄存器地址、寄存器数据。

    1、器件地址可以区分不同器件,也就是说一条两个口组成的IIC总线可以挂很多IIC器件,只要器件地址不一样。

    2、其中寄存器地址分1+7位,头一位(MSB),后7位是地址位。头位决定接下来的寄存器数据是读数据还是写数据

    3、寄存器数据,有时候可以连续读写,看具体器件的协议

    4、往往有一个指针的概念​,指向上一次读到/写到那个位的最后一个位


    • 发布于2019-01-23
    • 举报
    • 评论 0
    • 2
    • 0

  • SPI

    发送一个字节:

    三条线,一条时钟线CLK;一条MISO,一条MOSI。

    SPI的拉高拉低具体由CPOLCPHA确定,有四种形式,说起来比较啰嗦,可以看我最近试用的帖子第一篇,里面对CPOL和CPHA讲得比较详细

    常见SPI协议(两个字节)

    寄存器地址、寄存器数据

    这个协议层面比较简单,麻烦之处主要在时序方面,SPI通常不会做模拟,因此书序不需要了解得很精确

    有兴趣可以看看我最近试用stm32小系统板子探索HAL库的几片spi相关的文章

    以上临时手打,如果有误,欢迎指出

    • 发布于2019-01-23
    • 举报
    • 评论 0
    • 2
    • 0

  • 精通不敢说,但一般还是用得来。

    如果只是应用,那首先确定你是用哪个片子,如果是硬iic,那找准引脚,直接用就行,如果是软iic,就根据时序自己写(或者调库)。

    从学习的角度来说,推荐你先从arduino开始,因为代码入门简单啊,相关的库都有现成的。如果想自己啃时序,也可以直接看softwire文件,非常清晰。


    spi也不复杂,用的线多一点,单根线的功能更加简单(时钟、收、发、片选),但要确保各线之间协同工作就行。同样也是推荐从arduino入手,还是同样原因,代码简单,价格便宜,例程到处都有。。。

    • 发布于2019-01-23
    • 举报
    • 评论 0
    • 2
    • 0

  • i2c你可以多玩玩24cxx存储器,spi你玩25系列存储器,可以照着例程玩,还要看芯片数据手册
    • 发布于2019-01-23
    • 举报
    • 评论 0
    • 1
    • 0

  • 这两个是很基本的协议了,可以找个板子,用GPIO模拟的运行一下就明白了
    • 发布于2019-01-23
    • 举报
    • 评论 0
    • 1
    • 0

  • SPI(Serial Peripheral Interface:串行外设接口);一种串行传输方式,三线制,网上可找到其通信协议和用法的;3根线实现数据双向传输

    I2C(INTER IC BUS:意为IC之间总线)能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。

    SPI可以实现全双工,但I2C不行;


    • 发布于2019-01-23
    • 举报
    • 评论 0
    • 1
    • 0

  • 其实这个还是要具体做一下东西,找找视频看看怎么实现的过程比较直观些
    • 发布于2019-01-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 对不难,慢慢学,照着教程学一遍。静下心学
    • 发布于2019-01-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 两个都是常用的串行协议,这个要根据你的协议文档参考使用对应的时序,实际的操作并不难的
    • 发布于2019-01-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接参考原子的i2c和spi例程即可,他们的例程i2c是模拟的,spi是硬件的。
    • 发布于2019-01-30
    • 举报
    • 评论 0
    • 0
    • 0

  • I2C就是一根数据线一根时钟线,半双工,多机通信要靠地址

    SPI两根数据线一根时钟线,全双工,多机通信靠片选

    • 发布于2019-01-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 都是串行协议,主要一个是半双工,一个全双工,通信方式选取有异
    • 发布于2019-02-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 都是很简单的,因为都是标准的协议,直接用协议库来处理
    • 发布于2019-02-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 就是一个串行协议,一个时钟线,一个数据线
    • 发布于2019-02-28
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

i2c