0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >技术信息 > DS28E18 1-Wire 到I(2)C/SPI桥接器与命令序列器的基础知识

DS28E18 1-Wire 到I(2)C/SPI桥接器与命令序列器的基础知识

来源: hqbuy
2023-07-27
类别:技术信息
eye 10
文章创建人 拍明芯城

摘要

本应用笔记介绍了使用DS28E18 1-Wire 到I(2)C/SPI桥接器与命令序列器的基础知识,并讨论了快速启动和运行的步骤。然后演示如何在两个不同的设备上使用该设备。第一个设备是I(2)C湿度/温度传感器,第二个是SPI温度传感器设备。最后给出了每个命令的详细日志。

介绍

本应用笔记讨论了如何快速启动DS28E18。然后简要介绍一些简化的基于ds28e18的系统。它还概述了系统的操作流程,并演示了一些实际的例子与I(2)C和SPI温度传感器装置。有关详细的设备操作和规格,请参阅DS18E18数据表。I(2)C器件采用盛思锐SHTC3, SPI器件采用Maxim Integrated MAX31723。

DS28E18-Based系统

DS28E18用于两种类型的系统:

  • 单个DS28E18连接到1线控制器(图1和2)。图1显示了I(2)C器件,图2显示了SPI器件。

  • 第二种类型的系统可以有多个DS28E18共享同一1线总线连接到1线总线控制器(图3)。

所有这些数字都被简化以显示概念。请参阅DS28E18数据表了解实现细节。


图1所示、单ds28e18系统与连接的I(2)C设备


图2、单ds28e18系统与连接的SPI设备


图3、多个基于ds28e18的系统

DS28E18操作步骤

DS28E18的基本操作分为两个步骤:

  1. 初始化DS28E18。

  2. 与连接设备通信:

    1. (2) C接口

    2. SPI接口

在进入细节之前,让我们看看使DS28E18成为多功能设备的基本步骤。经过验证和真正的1-Wire接口可用于构造和写入多达512字节的序列到其序列器内存。它由命令和控制来操作附加的I(2)C或SPI设备。写入到测序器的数据可以被回读以验证它是否被正确写入。然后可以将测序数据发送到连接的I(2)C或SPI设备。DS28E18发送命令,读取响应,然后将其存储在其序列存储器中。然后可以通过返回指定的测序器位置来检索所存储的数据。图4显示了简化的数据流。


图4、DS28E18的写、读、运行顺序关系

初始化DS28E18

设备的初始化步骤如图5(单个DS28E18的系统)和图6(在1-Wire总线上具有多个DS28E18的系统)所示。


图5、单台ds28e18系统


图6、多个基于ds28e18的系统

初始化DS28E18

步骤1. 通过发送一个虚拟的Write GPIO Configuration (83h)命令(忽略结果)来填充1-Wire线上所有设备的唯一ROM ID。

1-线命令发送:RP CC 66 05 83 0B 03 A5 0F [75] [02] AA

解释:

RP:复位脉冲
CC:跳过ROM
66: Command Start
05:字节数
83:写GPIO配置
0B:设置访问GPIO控制寄存器
03:只允许值
A5: GPIO_CTRL_HI值
0F: GPIO_CTRL_LO值
75: CRC16_1
02: CRC16_2
AA:释放字节

结果:[FF] [01] [77] [BE][49] -忽略失败

步骤2. 执行搜索ROM命令查找连接到总线上的每个DS28E18设备。

本例中,1-Wire总线连接一台设备,ROM ID为:56708E0000000043

步骤3. 下发Write GPIO Configuration Command,将GPIO设置为已知状态。

1-线路命令发送:RP 55 56 70 8E 00 00 00 00 43 66 05 83 0B 03 A5 0F [75] [02] AA

解释:

RP:复位脉冲
55:匹配ROM
下8字节:目标设备ROMID
66: Command Start
05:字节数
83:写GPIO配置
0B:设置访问GPIO控制寄存器
03:只允许值
A5: GPIO_CTRL_HI值
0F: GPIO_CTRL_LO值
75: CRC16
02: CRC16
AA:释放字节

结果:[FF] [01] [AA] [7E] [10]

解释:

FF:虚拟字节
01:长度字节
AA:结果字节-成功
7 e: CRC16
10: CRC16

步骤4. 发出设备状态命令清除POR状态位。

1-发送的线路命令:RP 55 56 70 8E 00 00 00 00 43 66 01 7A [9F] [93] AA

解释:

RP:复位脉冲
55:匹配ROM
下8字节:目标设备ROMID
66: Command Start
01:字节数
7A:设备状态命令
9 f: CRC16
93: CRC16
AA:释放字节

结果(FF): [05] (AA) [02] [00] [00] [00] [E6] [0]

解释:

FF:虚拟字节
05:长度字节
AA:结果字节-成功
02: POR已经发生
00:设备版本
00: MANID [0]
00: MANID [1]
E6: CRC16
0 a: CRC16

步骤5. 执行Read Configuration命令检查现有设备设置。

1-发送的线路命令:RP 55 56 70 8E 00 00 00 43 66 01 6A [9E] [5F] AA

解释:

RP:复位脉冲
55:匹配ROM
下8字节:目标设备ROMID
66: Command Start
01:字节数
6A:读配置命令
9 e: CRC16
5 f CRC16
AA:释放字节

结果:[FF] [02] [AA] [01] [E1] [5F]

解释:

FF:虚拟字节
02:长度字节
AA:结果字节-成功
01:配置寄存器值

    • 普罗特:我(2)C

    • 不要忽视

    • SPD: 400 kHz

7 e: CRC16
10: CRC16

步骤6. 这个DS28E18已经设置为I(2)C模式。但是,作为练习,让我们将I(2)C速度设置为1MHz。让我们也做一个读取配置来验证,然后展示如何将设备设置为SPI模式。

在本例中,总线上有一个设备。因此,Skip ROM在以下一些命令中使用。

写配置命令设置I(2)C速度为1MHz

1-Wire命令发送:RP CC 66 02 55 02 [FE] [26] AA

解释:

RP:复位脉冲
CC:跳过ROM(在总线上有一个设备,可以使用跳过ROM命令。)
66: Command Start
02:字节数
55:写配置命令
02:配置寄存器

    • 普罗特:我(2)C

    • 不要忽视

    • SPD: 1mhz

菲:CRC16
26日:CRC16
AA:释放字节

结果:[FF] [01] [AA] [7E] [10]

解释:

FF:虚拟字节
01:长度字节
AA:结果字节-成功
7 e: CRC16
10: CRC16

读取配置命令以验证速度现在设置为1MHz

1-发送的线路命令:RP 55 56 70 8E 00 00 00 43 66 01 6A [9E] [5F] AA

解释:

RP:复位脉冲
55:匹配ROM
下8字节:目标设备ROMID
66: Command Start
01:字节数
6A:读配置命令
9 e: CRC16
5 f CRC16
AA:释放字节

结果:[FF] [02] [AA] [02] [A1] [5E]

解释:

FF:虚拟字节
02:长度字节
AA:结果字节-成功
02:配置寄存器值

  • 普罗特:我(2)C

  • 不要忽视

  • SPD: 1mhz

A1: CRC16
5 e CRC16

写配置命令设置DS28E18为SPI模式

1-线路命令发送:RP CC 66 02 55 38 [7E] [35] AA

解释:

RP:复位脉冲
CC:跳过ROM(在总线上有一个设备,可以使用跳过ROM命令。)
66: Command Start
02:字节数
55:写配置命令
38:配置寄存器

  • 防:SPI

  • Spi模式:3

  • SPD: 100 kHz

7 e: CRC16
35: CRC16
AA:释放字节

结果:[FF] [01] [AA] [7E] [10]

解释:

FF:虚拟字节
01:长度字节
AA:结果字节-成功
7 e: CRC16
10: CRC16

DS28E18初始化完成。

与已连接的设备通信

现在让我们看两个不同的与连接设备通信的例子。第一个器件是盛思锐SHTC3湿度传感器,第二个器件是MAX31723温度传感器。图7显示了与已连接的传感器设备的一般通信流。


图7、DS28E18与连接设备的基本通信流程

盛思锐shtc3i (2)C温湿度传感器

以下是SHTC3设备的一些亮点:

  • I(2)C通信:I(2)C地址的16进制形式为:写为0xE0,读为0xE1。

  • 使用以下命令顺序测量传感器数据:

    • 告警解释(2)- 0x3517

    • 最大唤醒时间是240us -让我们使用1ms。

    • 测量(2)- 0x5C24(先读取RH。正常模式)。

    • 正常模式下的最大测量等待时间为12.1 ms -让我们使用16ms。

    • 等待Measure命令发出后的测量等待时间。然后捕获并回读6字节的数据。

    • 前两个字节首先是湿度MSB。

    • 第三个字节是湿度CRC。

    • 第4和第5个字节首先是温度数据MSB。

    • 第6个字节是温度CRC。

根据实测原始数据计算湿度和温度值的公式如下:


以下是测量的完整流程和解释。计算值显示在流程的末尾。


与盛思锐SHTC3设备通信。命令流程示例


将DS28E18初始化为I(2)C模式,1MHz,不忽略NACK。

步骤1. 构建命令序列并编写序列器。

  1. 发送唤醒命令0x3517

  2. 日志含义发送度量命令0x5C24

  3. 回读6字节的数据

1-发送的线路命令:RP CC 66 22 11 000 000 02 E3 03 E0 35 17 03 DD 00 02 E3 03 E05 c 24

03 dd 04 02 e3 01 e1 d4 06Ff, Ff, Ff03 [b9] [f8] a

解释:

RP:复位脉冲
CC: Skip ROM(总线上有一个设备,可以使用Skip ROM命令。)
66: Command Start
22:字节数
11:写Sequencer命令
00: ADDR_LO
00: ADDR_HI
02: I(2)C Start -这是测序器数据的开始
E3: I(2)C写入数据- DS28E18音序器命令
03:写长度-字节数-发送到SHTC3的3个字节
SHTC3 I(2)C写地址
35: SHTC3唤醒命令字节1
17: SHTC3唤醒命令字节
03: I(2)C停止
DD: DS28E18延迟命令- SHTC2唤醒延迟
00:延迟1ms
02: I(2)C启动
E3: I(2)C写入数据- DS28E18音序器命令
03:写长度-字节数-将发送到SHTC3的3个字节
SHTC3 I(2)C写地址
5C: SHTC3测量命令字节1
24: SHTC3 Measure命令字节
03: I(2)C停止
DS28E18延迟命令- SHTC2测量延迟
04:16毫秒延迟
02: I(2)C开始
E3: I(2)C写入数据- DS28E18音序器命令
01:写长度-字节数- 1个字节将被发送到SHTC3
E1: SHTC3 I(2)C读地址
D4: DS28E18 I(2)C读取数据命令
06:要读取的字节数
FF:字节1的占位器- DS28E18将读取数据并将其放在这里
FF:字节2的占位符
FF:字节3的占位符
FF:字节4的占位符
FF:字节5的占位符
FF:字节6的占位符
03: I(2)C停止-音序器到此结束
B9: CRC16
F9: CRC16
AA:释放字节

结果:[FF] [01] [AA] [7E] [10]

解释:

FF:虚拟字节
01:长度字节
AA:结果字节-成功
7 e: CRC16
10: CRC16

步骤2. 发出Read Sequencer命令回读数据。

1-发送命令:RP CC 66 03 22 00 3E [D6] [69] AA

解释:

RP:复位脉冲
CC:跳过ROM(在总线上有一个设备,可以使用跳过ROM命令。)
66: Command Start
03:字节数
22:读取Sequencer命令
00: ADDR_LO
3 e: SLEN: ADDR_HI
D6: CRC16
69: CRC16
AA:释放字节

结果(FF): [20] (AA) [02] (E3) [03] (E0) [35] [17] [03] (DD) [00] [02] (E3) [03] [E0] c [5] [24] [03] (DD) [04] [02] (E3) [01] (E1) (D4) [06] (FF) (FF) (FF) (FF) (FF) (FF) [03] [14] (F1)

数据回读:

[02] (E3) [03] (E0) [35] [17] [03] (DD) [00] [02] (E3) [03] [E0] c [5] [24] [03] (DD) [04] [02] (E3) [01] (E1) (D4) [06] (FF) (FF) (FF) (FF) (FF) (FF) [03]

步骤3. 发出Run Sequencer命令来执行序列。如果序列器构造不正确,此命令将出错。

1-Wire命令发送:RP CC 66 04 33 00 3E 00 [18] [DD] AA

解释:

RP:复位脉冲
CC:跳过ROM(在总线上有一个设备,可以使用跳过ROM命令。)
66: Command Start
04:字节数
读取Sequencer命令
00: ADDR_LO
3 e: SLEN_LO: ADDR_HI
00: SLEN_HI
18: CRC16
弟弟:CRC16
AA:释放字节

结果:[FF] [01] [AA] [7E] [10]

解释:

FF:虚拟字节
01:长度字节
AA:结果字节-成功
7 e: CRC16
10: CRC16

现在让我们看看在sequencer中有什么,以及当Run sequencer命令发出时发生了什么。

表1。序列器数据示例
定序器地址数据字节命令的描述
000002I(2)C启动命令
0001E3I(2)C写数据命令- DS28E18
000203I(2)C写长度
0003E0I(2)C写数据- SHTC3写地址
000435I(2)C写数据- SHTC3唤醒命令字节
000517I(2)C写数据- SHTC3唤醒命令字节
000603I(2)C停止命令
0007DD延迟命令- DS28E18
000800延迟参数- 1ms
000902I(2)C启动命令
000年,一个E3I(2)C写数据命令- DS28E18
000 b03I(2)C写长度
000 cE0I(2)C写数据- SHTC3写地址
000 d5度I(2)C写数据- SHTC3测量命令字节
000 e24I(2)C写数据- SHTC3测量命令字节
华氏000度03I(2)C停止命令
0010DD延迟命令- DS28E18
001104延迟参数- 16ms
001202I(2)C启动命令
0013E3I(2)C写数据命令- DS28E18
001401I(2)C写长度
0015E1I(2)C写数据- SHTC3读地址
0016D4I(2)C读取数据命令- DS28E18
001706I(2)C读长度
0018FF我(2)C读取数据占位符-字节1
0019FF我(2)C读取数据占位符-字节2
001年,一个FF我(2)C读取数据占位符-字节3
001 bFF我(2)C读取数据占位符-字节4
001 cFF我(2)C读取数据占位符-字节5
001 dFF我(2)C读数据占位符-字节6
001 e03I(2)C停止命令

因此,当发出Run Sequencer命令时,将执行这个完整的数据序列。指示SHTC3唤醒,进行测量,并将结果发回DS28E18。DS28E18接收数据并将其存储在表1所示的占位符字节中。

步骤4. 发出Read Sequencer Command从DS28E18测序器地址0x0018到0x001D读取存储的湿度和温度数据。

1-线命令发送:RP CC 66 03 22 18 0C [5D] [BC] AA

解释:

RP:复位脉冲
CC:跳过ROM(在总线上有一个设备,可以使用跳过ROM命令。)
66: Command Start
03:字节数
22:读取Sequencer命令
18: ADDR_LO
0 c: SLEN: ADDR_HI
5 d: CRC16
公元前:CRC16
AA:释放字节

结果:(FF) [07] (AA) [73] (CB) [3] [65] [38] (DF) [54] [5 f]

从测序器回读6字节:[73][CB][3A][65][38][DF]

步骤5. 计算湿度和温度。

传感器RH数据= 0x73CB = 29643d

传感器T数据= 0x6538 = 25912d

相对湿度(%RH)= 100 × (29643/65536) = 45.23%

温度=-45 + 175 ×(25912/65536) = 24.19°C

Maxim集成MAX31723 SPI温湿度传感器

以下是MAX31723的一些亮点:

  • 通过将SERMODE连接到VDD来选择串口通信的SPI模式。

  • 设备以省电关机模式上电。设备上电后可置于连续或一次性转换模式。

  • 在设备中访问配置/状态寄存器时,读地址为00h,写地址为80h。

  • 地址字节的MSB (A7)决定是否进行读或写操作。如果A7为0,则发生一个或多个读周期。如果A7为1,则会发生一个或多个写周期。

  • 配置寄存器上电状态为0x01。

  • 配置寄存器必须设置为0x00才能启用连续温度转换模式。

  • 温度MSB寄存器提供温度读数的小数部分。0 x17 =比;23°C和0x18 =>24°C


与MAX31723设备通信。命令流程示例


将DS28E18初始化为SPI模式3和100kHz速度。这个例子涵盖了以下项目:

  1. 配置MAX31723进行温度测量。有关命令的详细信息,请参阅MAX31723数据表。

  2. 向MAX31723发出测量命令,并使用SPI写/读字节测量温度数据。

  3. 向MAX31723发出测量命令,并使用SPI写/读位测量温度数据。


配置MAX31723进行温度测量


步骤1. 发出写序列器命令为MAX31723配置写入DS28E18序列器内存。

写MAX31723配置字节到00h:

80 / / ss_low
DD / /延迟
03 / / 8女士
01 / / ss_high
C0 //spi写/读字节
02 //写入len
00 //读取len
80 //写入数据(MAX31723寄存器地址,写入)
00 //写入数据(MAX31723配置寄存器)
80 / / ss_low

1-发送命令:RP CC 66 0D 11 00 00 80 DD 03 01 c00 02 00 80 000 80 [D3] [E9] AA

Result: [FF] [01] [AA] [7E] [10] - Write Sequencer Command Passed。

步骤2. 发出Read Sequencer Command来验证Sequencer数据。

1-线路命令发送:RP CC 66 03 22 00 14 [57] [B6] AA

结果:(FF) [0 b] (AA) [80] (DD) [03] [01] [C0] [02] [00] [80] [00] [80] (C3) [1 e]

字节0:80
字节1:DD
字节2:03
字节3:01
字节4:C0
字节5:02
字节6:00
字节7:80
字节8:00
字节9:80

读取Sequencer命令已通过。

步骤3. 发出运行Sequencer命令来配置MAX31723。

1-线路命令发送:RP CC 66 04 33 00 14 00 [07] [BD] AA

结果:[FF] [01] [AA] [7E][10] -运行Sequencer命令通过。

MAX31723现在可以进行温度测量。

使用SPI写/读字节测量温度数据

步骤1:发出写序列命令,写入DS28E18序列存储器,以设置MAX31723进行温度测量(SPI写/读字节).

设置读回温度数据从MAX31723

01 / / ss_high
C0 //spi写/读字节
01 //写入len
04 //读取len
00 //写入数据(MAX31723寄存器地址,读取)
Ff //读取数据占位符(虚拟读取)
ff //读取数据位符(MAX31723状态寄存器)
ff //读取数据占位符(MAX31723温度LSB寄存器)
ff //读取数据占位符(MAX31723温度MSB寄存器)
80 / / ss_low

1-线路命令发送:RP CC 66 0D 11 00 00 01 c00 01 04 00 FF FF FF FF 80 [F8] [A5] AA

Result: [FF] [01] [AA] [7E] [10] - Write Sequencer Command Passed。

步骤2. 发出Read Sequencer Command来验证Sequencer数据。

1-线路命令发送:RP CC 66 03 22 00 14 [57] [B6] AA

结果:(FF) [0 b] (AA) [01] [C0] [01] [04] [00] (FF) (FF) (FF) (FF) [80] [E8] [52]

字节0:01
字节1:C0
字节2:01
字节3:04
字节4:00
字节5:FF
字节6:FF
字节7:FF
字节8:FF
字节9:80

读取Sequencer命令已通过。

步骤3. 发出运行序列命令来测量温度。

1-线路命令发送:RP CC 66 04 33 00 14 00 [07] [BD] AA

结果:[FF] [01] [AA] [7E][10] -运行Sequencer命令通过。

步骤4. 发出Read Sequencer命令从DS28E18测序器读取温度数据。

1-线命令发送:RP CC 66 03 22 05 08 [55] [2F] AA

结果:(FF) [05] (AA) (FF) [00] [80] [17] (F6) [68]

字节0:FF
字节1:00
字节2:80
字节3:17

读取Sequencer命令已通过。

测量温度数据为:1780h
测量温度:23.5°C(25°C为1910h

使用SPI写/读位测量温度数据

步骤1:发出写序列命令,写入DS28E18序列存储器,以设置MAX31723进行温度测量(SPI写/读位).


MAX31723 SPI写/读位序列


01 / / ss_high
B0 //spi读/写位
08 //写入len
18 //读取len
00 //写入数据(MAX31723寄存器地址,读取)
ff //读取数据位符(MAX31723状态寄存器)
ff //读取数据占位符(MAX31723温度LSB寄存器)
ff //读取数据占位符(MAX31723温度MSB寄存器)
80 / / ss_low

1-发送命令:RP CC 66 0C 11 00 00 01 B0 08 18 00 [FF] [FF] [FF] [FF] 80 [78] [E1] AA

Result: [FF] [01] [AA] [7E] [10] - Write Sequencer Command Passed。

步骤2. 发出Read Sequencer Command来验证Sequencer数据。

1-线路命令发送:RP CC 66 03 22 00 12 [D7] [B4] AA

结果:(FF) [0] (AA) [01] [B0] [08] [18] [00] (FF) (FF) (FF) [80] [34] [0 d]

字节0:01
字节1:B0
字节2:08
字节3:18
字节4:00
字节5:FF
字节6:FF
字节7:FF
字节8:80

读取Sequencer命令已通过。

步骤3。发出运行序列命令来测量温度。

1-线命令发送:RP CC 66 04 33 00 1200 [04] [1D] AA

结果:[FF] [01] [AA] [7E][10] -运行Sequencer命令通过。

步骤4. 发出Read Sequencer命令从DS28E18测序器读取温度数据。

1-线路命令发送:RP CC 66 03 22 05 06 [D4] [EB] AA

结果:[FF] [04] [AA] [00] [80] [17] [0E] [29]

字节0:00
字节1:80
字节2:17

读取Sequencer命令已通过。

测量温度数据为:1780h
测量温度:23.5℃(25℃为1910h)(3)

总结

本应用笔记涵盖了DS28E18的基本操作,以及如何使其启动并快速运行以测量各种传感器数据。同样的原理可以很容易地应用于与任何具有I(2)C或SPI接口的设备进行通信。


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: DS28E18

相关资讯