首页 > 其他分享 >LcdTools如何编写初始化代码之--IIC指令

LcdTools如何编写初始化代码之--IIC指令

时间:2022-11-25 20:14:48浏览次数:76  
标签:7bit IIC -- 发送 地址 SDA LcdTools 0x30

首先查看LcdTools帮助文档,了解IIC通信指令的详细描述和应用例子。

 

在了解IIC指令应用之前我们先回顾一下IIC通信协议的构成:

IIC由时钟线(SCL)和数据线(SDA)两根线构成通信线路,接口类型为开漏(或开集)输出,需要上拉电阻,总线空闲状态 IIC总线总线的SDA和SCL两条信号线同时处于高电平。IIC是一种主从结构(Master/Slave)总线,总线上每个设备都可以作为主机或从机,主设备通常是CPU,用来产生传输的时钟信号,并初始化总线的数据传输,而从设备只能被动响应主机请求。

因为一个IIC总线可以接多个从设备,这就需要主机通过地址来确定与哪个从机进行通信。IIC总线上的每个从设备都有一个唯一的7bit物理识别地址。因为IIC地址全0表示广播地址,所以一个IIC总线理论最多能挂载2^7 - 1=127个从设备。

IIC总线上传送的每一个位数据都由一个同步时钟脉冲相对应,即在SCL时钟线的配合下,数据线SDA通过MSB的方式串行传送每一位数据,IIC每次收发一个字节响应一个应答信号。
起始信号/从机地址/读写位/应答/数据/应答/…/应答/停止信号

(1)起始位/停止位
IIC总线空闲时,由上拉电阻拉成高电平状态,当主机要开始一次I2C通信,就发送一个START(起始S)信号告诉所有的从机,准备开始通信,当要结束一个I2C通信时,则发送一个STOP(停止P)信号告诉从机。

起始信号:当SCL保持高电平,SDA产生下降沿
停止信号:当SCL保持高电平,SDA产生上升沿

(2)读写地址
主机在发送START信号后,必须接着发送从机的物理地址。因为IIC是可实现半双工通信,所以主机对从机必须具有读和写的功能。

在7bit的物理地址后面,接着1bit的读写标识,0表示写操作,1表示读操作。

(3)应答信号
主机往IIC总线传输地址后,所有从机接收到次地址与自己的地址进行比较,若相同则发出一个ACK应答信号,主机收到这个应答信号表示通讯连接建立成功,主机若没收到应答信号则表示寻址失败。

SCL一直由Master控制,在发送数据的时候,SDA发送端控制的,发送完8位数据后,发送方释放SDA线,就变成了接收端控制SDA线。

应答位(ACK):表示继续,当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=0;
否应答位(NACK):表示不希望继续,当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=1。

(4)数据位收发
主机收到从机应答后,开始向对应的从机发送数据,SDA数据线上的每个字节8位,每个字节发送完成后,从机必须回一个应答信号,一次完整的通信传输的字节数量没有限制。

数据传输采用MSB的方式,数据位传输必须在SCL高电平之间,SDA高电平表示发送1,SDA低电平表示发送0。在数据位传输过程种,SDA的数据位在SCL高电平时刻要保持稳定不变,不然就变成了起始信号或停止信号了。

(5)数据读写操作

a) 主机向从机写入N个字节

 b) 主机从从机读出N个字节

 c) 混合读写

1、IIC写指令I2cWrite()

<从机地址> 从设备地址,7bit模式,读写位PG自动补齐,比如设备7bit地址为0x30,实际发送时PG自动补最低位写(bit[0] 0),则实发设备地址为0x60。

<子地址> 子地址为16位数,低8位为一级子地址,高8位为二级子地址,当需要发两个子地址时,高8位子地址先发;对于IIC写操作,子地址只是便于标识,从发送过程来讲,和其他发送数据一样,可以当作数据发送,没有区别。

<子地址模式> 如果需要使用子地址,则需要设置子地址模式,用“SUBADDR0”、“SUBADDR1”、“SUBADDR2”来标识无子地址、一个字节子地址、两个字节子地址,如果不需要使用子地址,用“SUBADDR0”标识,则<子地址>数据会被忽略。

<参数...> 子地址模式数据后面跟随的就是需要写的数据,每个数据8位,数据个数最大支持256个。

举例说明:

a) 往设备0x30(7bit addr)无子地址模式发送N个参数

I2cWrite (0x30,0x00, SUBADDR0, 0xa0,0x03,0x55,.....);

b) 往设备0x30(7bit addr)子地址0x50中写N个数

I2cWrite (0x30,0x50, SUBADDR1, 0xa0,0x03,0x55,.....);

实际等效于:I2cWrite (0x30,0x00, SUBADDR0, 0x50,0xa0,0x03,0x55,.....);

c) 往设备0x30(7bit addr)子地址0xF050中写N个数

I2cWrite (0x30,0xF050, SUBADDR2, 0xa0,0x03,0x55,.....);

等效于:I2cWrite (0x30,0x00, SUBADDR0, 0xF0,0x50,0xa0,0x03,0x55,.....);

2、IIC读指令I2cRead()

<从机地址> 从设备地址,7bit模式,读写位PG自动补齐,比如设备7bit地址为0x30,实际发送时PG自动补最低位写(bit[0] 0),则实发设备地址为0x60。

<子地址> 子地址为16位数,低8位为一级子地址,高8位为二级子地址,当需要发两个子地址时,高8位子地址先发;如果读取操作需要发送子地址,则在发送完子地址后IIC自动Repeat Start,再启动读取,参考上面的 混合读写。

<子地址模式> 如果需要使用子地址,则需要设置子地址模式,用“SUBADDR0”、“SUBADDR1”、“SUBADDR2”来标识无子地址、一个字节子地址、两个字节子地址,超过2个子地址写则用“SUBADDRN”来标识;如果不需要使用子地址,用“SUBADDR0”标识,则<子地址>数据会被忽略。当使用超过两个子地址模式时,<子地址>参数会被忽略,把需要发送的多个子地址放到<子地址模式>之后当数据发送出去。

<读取个数> 指令参数中,最后一个参数用于表示读取数据个数。

举例说明:

a) 从设备0x30(7bit addr)无子地址模式读取2个参数

I2cRead(0x30,0x00, SUBADDR0, 2);

b) 从设备0x30(7bit addr)子地址0x50中读取2个数

I2cRead(0x30,0x50, SUBADDR1, 2);

c) 从设备0x30(7bit addr)子地址0xF050中读取2个数

I2cRead (0x30,0xF050, SUBADDR2, 2);

d) 从设备0x30(7bit addr)先发送0x50 0xfe 0x3f 0x02 0x12 0x00 0x08后,再读取5个参数

I2cRead (0x30,0x00, SUBADDRN, 0x50,0xfe,0x3f,0x02,0x12,0x00,0x08, 5);

下面举实例演示LcdTools怎么写初始化代码:

1。给出的设备地址位8bit模式(注意:如果给出的设备地址大于0x7f,那就是8bit地址)

先把8bit sla地址转成7bit模式,0xB8右移一位为0x5C,用LcdTools实现上述代码如下图

 

标签:7bit,IIC,--,发送,地址,SDA,LcdTools,0x30
From: https://www.cnblogs.com/xk-image/p/16886725.html

相关文章

  • sort自然排序顺序
    1、问题:fs读取文件夹文件的时候,有时顺序是乱的   而实际想要的顺序是这样的2、思路:主要通过js的数组中的sort方法来处理利用replace正则区分数字与非数字来遍历......
  • Request-获取请求行数据-方法介绍、代码演示
    Request-获取请求行数据-方法介绍3.request功能:1.获取请求消息数1.获取请求行数据GET/day14/demo1?name=zhangsanHTTP/1.1......
  • 关于IIC总线上的毛刺?
    实际工程应用中,我们发现,用示波器测量IIC信号会发现总会有一些毛刺,而且仔细观察还可以发现这个毛刺是周期性的,这是为什么呢?如图:我们知道IIC是一种总线协议,如下:之所以......
  • ESP32_freeRTOS教程十一:Queue队列的三种数据传递
    xQueueCreate用法   创建队列1.QueueHandle_txQueueCreate(UBaseType_tuxQueueLength, UBaseType_tuxItemSize); 参数:队列长度      数据项的......
  • s's's's
    1.群组(还有问题)2.新建任务的派工人头像是蓝色底3.新建任务里新建子任务,点击确认到主任务详情页面,子任务的头像没显示4.新建子任务异常,不能修改为进行中5。企业微信首......
  • Vulnhub之Insomnia靶机详细解题估计出
    Insomnia作者:jason_huawen靶机基本信息名称:Insomnia:1地址:https://www.vulnhub.com/entry/insomnia-1,644/识别目标主机IP地址......
  • selenium的基本使用
    selenium的基本使用bs4搜索文档树frombs4importBeautifulSouphtml_doc="""<html><head><title>TheDormouse'sstory</title></head><body><pid="myp"class......
  • MySQL查询关键字
    SQL语句查询关键字前期数据准备编写SQL语句的小技巧查询关键字之where筛选查询关键字之groupby分组查询关键字之having过滤查询关键字之distinct去重......
  • SpringMVC
    SpringMVC的基本流程:浏览器发送请求,如请求地址符合前端控制器的url-pattern,该请求就会被前端控制器DispatcherServlet进行处理,前端控制器会读取SpringMVC的核心配置文件,......
  • 例程分析:GPIO输出——使用固件库点亮LED灯
     1 编程要点①使能GPIO端口时钟;②初始化GPIO目标引脚为推挽输出模式;③编写简单测试程序,控制GPIO引脚输出高、低电平。2 代码分析 宏定义的意义:通过把硬件相关......