![](http://www.21ic.com/d/file/201104/a6a48d420b19efee2318f1f60fbdd36b.gif)
![](http://www.21ic.com/d/file/201104/2f8bba322371e17a3c911b4b32129081.gif)
DS1991与单片机的接口非常方便,只用1根数据线和1根地址。数据线由单片机的1根I/O口线控制,口线外接一个5kΩ的上拉电阻。 DIO BIT P1.0 ;引脚定义 RET DJNZ R6,WRB1
![](http://www.21ic.com/d/file/201104/71d3eb321699c4b6a93e95a7b706a620.gif)
RESET:CLR DIO ;得位子程序 MOV R7,#205 DELPP1:NOP DJNZ R7,DELPP1 SETB DIO MOV R7,#12 DJNZ R7,$ MOV R7,#27 RESETP1:JNB DIO,RESETP2 DJNZ R7,RESETP1 RESRET:SETB DIO MOV A,#0EH
![](http://www.21ic.com/d/file/201104/6234a7f208dd5ea63a01209acf72545d.gif)
RESETP2:MOV R7,#75 DJNZ R7,$ MOV R7,#54 RESETP4:JB DIO,RESETP5 DJNZ R7,RESETP4 RESETP5:MOV R7,#180 DJNZ R7,$ SETB DIO MOV A,#0 RET WRBYTE:MOV R6,#8 ;写1字节子程序 WRB1:CLR DIO MOV R7,#2 DJNZ R7,$ RRC A MOV DIO,C MOV R7,#30H DJNZ R7,$ SETB DIO NOP NAP NOP
![](http://www.21ic.com/d/file/201104/2dd940a273be8ea593cd3e4149556137.gif)
RET RDBYTE:MOV R6,#8 ;读1字节子程序 RDB1:CLR DUO NOP NOP SETB DIO MOV R7,#3 DJNZ R7,$ MOV C,DIO RRC A MOV R7,#32 DJNZ R7,$ SETB DIO MOV R7,#3 DJNZ R7,$ DJNZ R6,RDB1 RET
![](http://www.21ic.com/d/file/201104/234cdd29df848174aad580ae2b61cb86.gif)
3 DS1991激光ROM码、存储器结构及操作 像所有的1-wire总线器件一样,主机必须先进行初始化和ROM操作,而后才能进行读写DS1991存储器的操作。 DS1991有一个自身唯一的工厂刻入的64位激光ROM系列码。该码不会与其它任何一个1-wire总线器件相重。该码前8位是1-wire总线家族码,后48位是器件唯一的系列码,最后8位为前56位数据的CRC校验码。ROM操作指令建立被访问的1-wire器件与主机的连接,ROM操作指令如表1。DS1991的存储器映像如图1。
表1 ROM操作指令
命 令 | 字 节 | 功 能 |
read ROM | 33H | 读取DS1991的ROM系统列码 |
Match ROM | 55H | 总线接多个器件时用于寻址特定的器件 |
Skip ROM | CCH | 总线上只有一个器件时,跳过ROM系列码的匹配而直接进行存储器的访问 |
Search ROM | F0H | 主机使用该命令读加器件的ROM系列码 |
表2 DS1991存储器操作命令格式
命令 | 第1字节 | 第2字节 | 第3 字节 |
功 能 | |||||||
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | ||||
写scratchpad | 96H | 1 1 | 00H~3FH中的任意值 | 第2字节取反 | 将数据写入scratchpad | ||||||
读scratchpad | 69H | 从scratchpa读出数据 | |||||||||
拷贝scratchpad | 3CH | Subke区号 0 0或 0 1或 1 0 |
0 | 0 | 0 | 0 | 0 | 0 | 将数据块从scratchpa拷贝到指定的subkey | ||
读subkey | 66H | 10H~3FH中的任意值 | 将数据写入subkey | ||||||||
写subkey | 99G | 从subkey中读取数据 | |||||||||
写密码 | 5AH | 0 | 0 | 0 | 0 | 0 | 0 | 将密码和ID码写入subkey |
图7
结语 DS1991的密码保护存储器区为用户提供高可靠的数据保护措施。本文提供的DS1991与单片机接口的软硬件设计,已在信息纽扣卡型公用电表系统中应用。 摘要:Dallas公司的iButton产品是一系列1-wire总线新型器件。DS1991是一种加密存储器型信息纽扣,封装于直径为16mm的不锈钢外壳中,体积小巧,便于携带、保存,防尘、防腐蚀,可以在恶劣的应用环境中实现带密码保护的数据传送。本文介绍DS1991的特点、工作原理及其带密码保护存储器区的读写方法。 关键词:iButton信息纽扣 1-Wire总线 单片机 DS1991是Dallas公司的1-wire总线信息纽扣家庭中的一员,是一种加密存储器型信息纽扣。它内部集成了1Kbit是非易失性存储器及加密保护逻辑,封装于直径为16mm、厚约6mm的不锈钢外壳中,何种小巧、操作便捷,防潮、抗震、防灰尘,可在恶劣的环境中实现带密码保护的数据传送。
![](http://www.21ic.com/d/file/201104/a6a48d420b19efee2318f1f60fbdd36b.gif)
![](http://www.21ic.com/d/file/201104/2f8bba322371e17a3c911b4b32129081.gif)
DS1991与单片机的接口非常方便,只用1根数据线和1根地址。数据线由单片机的1根I/O口线控制,口线外接一个5kΩ的上拉电阻。 DIO BIT P1.0 ;引脚定义 RET DJNZ R6,WRB1 DS1991操作的基础是1-wire总线的初始化、读/写1位时序,如图2、图3、图4和图5。VPULLUP为图1中D点在口线为输入状态时的电位。初始化由主机发出复位脉冲。DS1991回复应答脉冲,使主机了解DS1991存在于总线上并已作好操作准备。命令和数据的各个字节由最低有效位起一位一位传送。子程序RESET、RDBYTE和WRBYTE分别是初始化、读/写1字节的子程序。
![](http://www.21ic.com/d/file/201104/71d3eb321699c4b6a93e95a7b706a620.gif)
RESET:CLR DIO ;得位子程序 MOV R7,#205 DELPP1:NOP DJNZ R7,DELPP1 SETB DIO MOV R7,#12 DJNZ R7,$ MOV R7,#27 RESETP1:JNB DIO,RESETP2 DJNZ R7,RESETP1 RESRET:SETB DIO MOV A,#0EH
![](http://www.21ic.com/d/file/201104/6234a7f208dd5ea63a01209acf72545d.gif)
RESETP2:MOV R7,#75 DJNZ R7,$ MOV R7,#54 RESETP4:JB DIO,RESETP5 DJNZ R7,RESETP4 RESETP5:MOV R7,#180 DJNZ R7,$ SETB DIO MOV A,#0 RET WRBYTE:MOV R6,#8 ;写1字节子程序 WRB1:CLR DIO MOV R7,#2 DJNZ R7,$ RRC A MOV DIO,C MOV R7,#30H DJNZ R7,$ SETB DIO NOP NAP NOP
![](http://www.21ic.com/d/file/201104/2dd940a273be8ea593cd3e4149556137.gif)
RET RDBYTE:MOV R6,#8 ;读1字节子程序 RDB1:CLR DUO NOP NOP SETB DIO MOV R7,#3 DJNZ R7,$ MOV C,DIO RRC A MOV R7,#32 DJNZ R7,$ SETB DIO MOV R7,#3 DJNZ R7,$ DJNZ R6,RDB1 RET
![](http://www.21ic.com/d/file/201104/234cdd29df848174aad580ae2b61cb86.gif)
3 DS1991激光ROM码、存储器结构及操作 像所有的1-wire总线器件一样,主机必须先进行初始化和ROM操作,而后才能进行读写DS1991存储器的操作。 DS1991有一个自身唯一的工厂刻入的64位激光ROM系列码。该码不会与其它任何一个1-wire总线器件相重。该码前8位是1-wire总线家族码,后48位是器件唯一的系列码,最后8位为前56位数据的CRC校验码。ROM操作指令建立被访问的1-wire器件与主机的连接,ROM操作指令如表1。DS1991的存储器映像如图1。
表1 ROM操作指令
命 令 | 字 节 | 功 能 |
read ROM | 33H | 读取DS1991的ROM系统列码 |
Match ROM | 55H | 总线接多个器件时用于寻址特定的器件 |
Skip ROM | CCH | 总线上只有一个器件时,跳过ROM系列码的匹配而直接进行存储器的访问 |
Search ROM | F0H | 主机使用该命令读加器件的ROM系列码 |
表2 DS1991存储器操作命令格式
命令 | 第1字节 | 第2字节 | 第3 字节 |
功 能 | |||||||
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | ||||
写scratchpad | 96H | 1 1 | 00H~3FH中的任意值 | 第2字节取反 | 将数据写入scratchpad | ||||||
读scratchpad | 69H | 从scratchpa读出数据 | |||||||||
拷贝scratchpad | 3CH | Subke区号 0 0或 0 1或 1 0 |
0 | 0 | 0 | 0 | 0 | 0 | 将数据块从scratchpa拷贝到指定的subkey | ||
读subkey | 66H | 10H~3FH中的任意值 | 将数据写入subkey | ||||||||
写subkey | 99G | 从subkey中读取数据 | |||||||||
写密码 | 5AH | 0 | 0 | 0 | 0 | 0 | 0 | 将密码和ID码写入subkey |
结语 DS1991的密码保护存储器区为用户提供高可靠的数据保护措施。本文提供的DS1991与单片机接口的软硬件设计,已在信息纽扣卡型公用电表系统中应用。