一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

通过微处理器的一个端口实现1-Wire主控制器通信的软件方案

来源:analog 发布时间:2024-01-22

摘要: 在没有专用总线主机(如DS2480B, DS2482)的情况下,微处理器可以轻松地产生一线时序信号。“C”,“C”,“C”1- wire: 1- wire: 1- wire: 1- wire: 1- wire字节操作可以通过反复调用位操作实现,本文提供了通过各种传输线与一线器件进行可靠通信的时间参数。

1-Wire(电线)中文:中文:中文:电线此外,本文也讨论了高速通信模式。要使该实例中的代码正常运行,系统必须满足以下几点要求:

  1. 微处理器的通信端口必须是双向的,其输出为漏极开路,且线上具有弱上拉。一根电线。关于简单的一线主机微处理器电路实例,请参见应用笔记4206:“为嵌入式应用选择合适的机的主机”中的1类部分。

  2. 1µs 1µs 1µs 1µs

  3. 通信过程不能被中断。

1- wire: 1- wire: 1- wire: 1- wire: 1- wire: 1- wire在数据资料中,将完成一位传输的时间称为一个时隙。于是字节传输可以通过多次调用位操作来实现,下面的表1是各个操作的简要说明以及实现这些操作所必须的步骤列表。图1为其时序波形图。1-Wire(线)1-Wire(钢丝)请参考可下载的工作表中的系统和器件参数,确定最小值和最大值。

表1. 1-Wire
操作描述实现
写1位发送一个'1'位到1- wire从机(写1时隙)驱动母线低,延迟A
释放总线,延迟B
写0位发送一个'0'位到1线从机(写入0时隙)驱动母线低,延时C
释放总线,延迟D
读一些从1-Wire从机读取一个位(读取时隙)驱动母线低,延迟A
释放总线,延迟E
从从机读取比特的采样总线
延迟F
重置重置1-Wire总线从设备并为命令做好准备延迟G
驱动母线低,延时H
释放总线,延迟I
采样总线,0 =存在设备,1 =不存在设备
延迟J


图1. 1-导线

表2. 1 .电线
参数速度推荐(µs)
一个标准6
超速1.0
B标准64
超速7.5
C标准60
超速7.5
D标准10
超速2.5
E标准9
超速1.0
F标准55
超速7
G标准0
超速2.5
H标准480
超速70
标准70
超速8.5
J标准410
超速40

计算这些值的工作表可供  下载。

代码实例

下面代码实例都依赖于两个通用的' C '函数outp和输入,从输入输出端口读写字节数据。“”“”“”“”“”当应用于其它平台时,可以采用合适的函数来替代它们。

//从'port'int inp(无符号端口,int databyte)中读取字节;


portaddress(图例3)“线”,“线”。设定该位为0,将使一线总线变为低电平;设定该位为1,一线总线将被释放,此时一线总线被电阻上拉,或被一线从器件下拉。

代码中的tickDelay函数是一个用户编制的子程序,此函数用于产生一个1/4µ年代整数倍的延时。在不同的平台下,该函数的实现也是不同的,故在此不做具体描述。以下是tickDelay函数声明代码,以及一个SetSpeed函数,用于设定标准速度和高速模式的延时时间。

实例1. 1-Wire

//精确地暂停'tick'的次数= 0.25usvoid tickDelay(int tick);特定于平台的/ / / /实现“滴答”valuesint A, B, C, D, E, F, G, H, I, J ;//-----------------------------------------------------------------------------// 机的时间设置为“标准”(标准= 1)或“超速”(标准= 0)。//void SetSpeed(int standard){//根据速度调整刻度值if (standard){//标准速度A = 6 * 4;B = 64 * 4;C = 60 * 4;D = 10 * 4;E = 9 * 4;F = 55 * 4;G = 0;H = 480 * 4;I = 70 * 4;J = 410 * 4;} else{//超速A = 1.5 * 4;B = 7.5 * 4;C = 7.5 * 4;D = 2.5 * 4;E = 0.75 * 4;F = 7 * 4;G = 2.5 * 4;H = 70 * 4;I = 8.5 * 4;J = 40 * 4;}}


1-Wire(电线)

实例2. 中文:1-线

//-----------------------------------------------------------------------------// 生成一个机复位,返回1如果没有发现存在检测,/ /否则返回0。//(注意:不处理来自DS2404/DS1994的告警)//int OWTouchReset(void){int result;tickDelay (G);outp (PORTADDRESS 0 x00);//驱动DQ低tickDelay(H);outp (PORTADDRESS 0 x01);//释放总线tickDelay(I);result = inp(PORTADDRESS) ^ 0x01;//从tickDelay(J)获取存在脉冲的采样;//完成复位序列恢复返回结果;/ /返回样品存在脉冲的结果 }//-----------------------------------------------------------------------------// 送机的编写。提供10us的恢复时间。//无效OWWriteBit(int bit){if (bit){//写入'1'位输出(PORTADDRESS,0x00);//驱动DQ低tickDelay(A);outp (PORTADDRESS 0 x01);//释放总线tickDelay(B);//完成时隙和10us恢复}else{//写入'0'位输出(PORTADDRESS,0x00);//驱动DQ低tickDelay(C);outp (PORTADDRESS 0 x01);//释放总线tickDelay(D);}}//-----------------------------------------------------------------------------// 读一些一线总线并返回。提供10us的恢复时间。//int OWReadBit(void){int result;outp (PORTADDRESS 0 x00);//驱动DQ低tickDelay(A);outp (PORTADDRESS 0 x01);//释放总线tickDelay(E);result = inp(PORTADDRESS) &0 x01;//从tickDelay(F)中采样比特值;//完成时隙和10us恢复返回结果;}


1-Wire: 1-Wire: 1-Wire: 1-Wire: 1-Wire: 1-Wire

实例3. 1-Wire

//-----------------------------------------------------------------------------// 编写机的数据字节/ /空白OWWriteByte (int数据){int循环;//循环写入字节中的每个位,先写ls位for (Loop = 0;循环& lt;8;OWWriteBit(data &0 x01);//移动下一位的数据字节>>= 1;}}//-----------------------------------------------------------------------------// 读机的数据字节和/ /返回int OWReadByte (void) {int循环,结果= 0;For (loop = 0;循环& lt;8;Loop ++){//将结果移位为下一位做好准备>>= 1;//如果结果为1,则设置MS位if (OWReadBit ) result |= 0x80;}返回结果 ;}//-----------------------------------------------------------------------------// 写一个一线数据字节并返回采样结果。//int OWTouchByte(int data){int循环,结果=0;For (loop = 0;循环& lt;8;Loop ++){//将结果移位为下一位做好准备>>= 1;//如果发送一个'1',则读取一个'0'如果(data &0x01) {if (OWReadBit ) result |= 0x80;} else OWWriteBit(0);//移动下一位的数据字节>>= 1;}返回结果 ;}//-----------------------------------------------------------------------------// 写一块机的数据字节和返回采样的结果在同一/ /缓冲区。//无效OWBlock(unsigned char *data, int data_len){int loop;For (loop = 0;循环& lt;data_len;{data[loop] = OWTouchByte(data[loop]);}}//-----------------------------------------------------------------------------// 设置所有设备机超速档速度。如果检测到至少一个//超速驱动设备,返回'1'。//int OWOverdriveSkip(unsigned char *data, int data_len){//设置速度为'标准' SetSpeed(1);//复位所有设备如果(OWTouchReset ) //复位1-Wire总线返回0;//如果没有找到设备返回// overdrive skip命令OWWriteByte(0x3C);//设置速度为'overdrive' SetSpeed(0);//在'overdrive'中进行1线复位并返回存在结果返回OWTouchReset ;}


OWTouchByte函数可以同时完成读写机总线数据,通过该函数可以实现数据块的读写。API、API、API、API、API、API、API、API、API、API。通过OWTouchByte函数,OWBlock函数简化了一线总线的数据块发送和接收。中文:OWTouchByte(0xFF), OWReadByte , OWTouchByte(data), OWWriteByte(data)。

这些函数和tickDelay函数一起构成了一线总线进行位,字节和块操作时所必需的全部函数。实例4给出了利用这些函数读取DS2432的sha - 1认证页的实例。

实例4. [au:

//-----------------------------------------------------------------------------// 读取并返回页面数据和sha - 1哈希的消息验证码(MAC)从DS2432 / /。//int ReadPageMAC(int page, unsigned char *page_data, unsigned char *mac){int i;Unsigned short data_crc16, mac_crc16;//设置速度为'standard' SetSpeed(1);//选择设备if (OWTouchReset ) //复位1线总线返回0;//如果没有设备找到OWWriteByte(0xCC)返回;//发送Skip ROM命令选择单个设备//读取页面OWWriteByte(0xA5);//读取鉴权命令OWWriteByte((page <<)5),0 xff);// TA1 OWWriteByte(0);// TA2(对于DS2432总是零)//读取页面数据(i = 0;我& lt;32;i++) page_data[i] = OWReadByte ;OWWriteByte (0 xff);//读取命令,地址和数据的CRC16 = OWReadByte ;data_crc16 |= (OWReadByte  <<8);//设备MAC计算延迟2ms //读取MAC (i = 0;我& lt;20;i++) mac[i] = OWReadByte ;//读取MAC的CRC16, mac_crc16 = OWReadByte ;mac_crc16 |= (OWReadByte  <<8);//检查CRC16…返回1;}

附加软件

1-Wire, 1-Wire, 1-Wire, 1-Wire, 1-Wire。1-Wire(信号线)。金属丝,金属丝,金属丝。187年在应用笔记:“机搜索算法”一文中详细介绍了这种搜索方法,同时也给出了实现这些机的基本函数的C程序代码。

1-Wire(电线

“1-Wire (1-Wire)”。

替换方案

如果对于某一特定应用,通过软件实现机的主机方案不可行,则作为替换方案,可以采用机的主机芯片或合成的一线主机单元。

Maxim,
DS1WM

Verilog/VHDL;

合成的一线主机工作方式在应用笔记119:“在FPGA或ASIC中嵌入机的主机”中进行了说明。

中文:电线1-Wire (1-Wire)类似地,ds2482 ds2482 - 100 - 101和ds2482 - 800可以连接至我²C端口。

关于DS2480B的操作,详见应用笔记192:“DS2480B串行接口机线驱动器的使用”。

关于DS2482的操作,详见应用笔记3684:“如何使用我²C接口的DS2482机的主控制器”。

244年应用笔记:“性能优异的机网络驱动器”给出了一种专为远距离传输线设计的先进的机线驱动器。



声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: