esp8266学习笔记⑧:I²C和SPI模块

I²C和SPI这两个总线,相信玩电子的人都不陌生,具体怎么实现的我也就不多描述了。在这里,我就写一下在Nodemcu官网上这两个总线是怎么使用的和这两种总线的特点。供自己方便查阅。

I²C总线

I²C总线(I²C bus,Inter-IC bus)是一个双向的两线连续总线,提供集成电路(ICs)之间的通信线路。I²C总线是一种串行扩展技术,最早由Philips公司推出,广泛应用于电视,录像机和音频设备。
特点:

  1. 只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL
  2. 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器主机接收器
  3. 它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;
  4. 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s

SPI总线

SPI串行外设接口(Serial Peripheral Interface)的缩写。SPI是一种高速的,全双工同步的通信总线,并且在芯片的管脚上只占用四根线:一条时钟线SCK,一条数据输出线MOSI,一条数据输入线MISO,一条片选线CS
SPI接口主要应用在 EEPROMFLASH实时时钟AD转换器,还有数字信号处理器数字信号解码器之间。用于CPU与各种外围器件进行全双工、同步串行通讯。
特点:

  1. 可以同时发出和接收串行数据;
  2. 可以当作主机或从机工作;
  3. 提供频率可编程时钟;
  4. 发送结束 中断标志;
  5. 写冲突保护;
  6. 总线竞争保护等。

函数使用

I²C函数

函数名功能
i2c.address()设置I²C地址和下一次传输的读/写模式。
i2c.read()读取可变字节数的数据。
i2c.setup()初始化I²C模块。
i2c.start()发送I²C启动条件。
i2c.stop()发送I²C停止条件。
i2c.write()将数据写入I²C总线。

i2c.address()
语法:i2c.address(id, device_addr, direction)
参数:
id0
device_addr7位的设备地址
directioni2c.TRANSMITTER(等待模式)或 i2c. RECEIVER( 阅读模式)
返回值:true:接收到,false:没有接收到

i2c.read()
语法:i2c.read(id, len)
参数:
id0
len为数据字节数
返回值:string接收数据串

i2c.setup()
语法:i2c.setup(id, pinSDA, pinSCL, speed)
参数:
id0
pinSDAsda所接的引脚
pinSCLscl所接的引脚
speed传送速率,只支持i2c.SLOW低速
返回值:speed选定的传送速率
例子:

id  = 0
sda = 1
scl = 2
i2c.setup(id, sda, scl, i2c.SLOW)

i2c.start()
语法:i2c.start(id)
参数:id0
返回值:nil

i2c.stop()
语法:i2c.stop(id)
参数:id0
返回值:nil

i2c.write()
语法:i2c.write(id, data1, data2, ..., datan)
参数:
id0
data数据可以是数字、字符串或Lua表
返回值:number写入字节数
例子:

i2c.write(0, “hello”, “world”,"!!!")

SPI函数
注:ESP硬件提供两个SPI总线,ID 01,它们映射到通常标记为SPIHSPI的引脚。

函数名功能
spi.recv()从SPI接收数据
spi.send()以半双工模式通过SPI发送数据,在全双工模式下发送和接收数据.
spi.setup()设置SPI配置

spi.recv()
语法:spi.recv(id, size, default_data)
参数:
id:SPI ID号:0表示SPI1表示HSPI
size要读取的数据项数目
default_dataMOSI上发送默认数据(如果省略,则全部-1)
返回值:从SPI读取的字节的字符串

spi.send()
语法:

  1. 半双工:wrote = spi.send(id, data1, data2, ..., datan)
  2. 全双工:wrote[, rdata1, ..., rdatan] = spi.send(id, data1, data2, ..., datan)

参数:
id:SPI ID号:0表示SPI1表示HSPI
data:发送的数据,数据可以是字符串、表或整数
返回值:wrote:写的字节数,rdata:使用spi.FULLDUPLEX配置时收到数据
与相应数据参数相同的数据类型。

spi.setup()
语法:spi.setup(id, mode, cpol, cpha, databits, clock_div, duplex_mode)
参数:
id:SPI ID号:0表示SPI1表示HSPI
mode:模式选择主模式或从模式,spi.MASTER(主)或spi.SLAVE(从)
cpol:时钟极性选择,spi.CPOL_LOWspi.CPOL_HIGH
cpha:时钟相位选择,spi.CPHA_LOWspi.CPHA_HIGH
databits:每个数据项的位数,1-32
clock_div:时钟分频器,f(SPI)= 80 MHz / clock_div,范围为(1 .. n)(0默认为分频器8
duplex_mode:模式选择,半双工 spi.HALFDUPLEX(默认)或全双工 spi.FULLDUPLEX
返回值:数字1
例子:

spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
gpio.mode(8, gpio.INPUT, gpio.PULLUP)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值