如何嵌入1-Wire主机

1-wire主机ds1wm,称作1wm,创建它是为了便于实现主机cpu通过1-wire总线与器件进行通信,而无须涉及位时序操作。本应用指南阐述如何将1 wire主机(1wm)嵌入到用户asic设计之中。本文提到的ds89c200只是一个理论上的微控制器,另外,假定读者已经具备了1-wire主机ds1wm和1-wire协议的一般知识。如欲了解更详细信息,请参阅[1]ibutton标准手册(book of ibutton standard)和[2]ds1wm数据资料(ds1wm datasheet)。

  结构

  ds1wm排列象一个顶级的甲胄,连接四个子模块,构成一个完整的单元。在这个顶级的甲胄中并没有hdl代码。四个子模块分别是:one_wire_interface、one_wire_master 、clk_prescaler和one_wire_io。对于那些不需要时钟分频器的应用,如果提供外部1mhz时钟源作为clk_1us 时钟信号,就可以省去预分频器模块(如ds1wm数据资料中的τ注释,输入时钟指定在0.8mhz至1.0mhz之间)。

  单总线输入输出模块为data总线和dq提供双向信号。在大多数应用中,dq信号是一个i/o引脚。如果是这种情况,dq引脚驱动器必须是一个漏极开路引脚,且具有合适的esd保护(参见图1)。另外,如果外围器件所使用的上拉电压高于1wm电源电压,则引脚驱动器还必须承受这样的超限电压,且不能使用钳位二极管。dallas建议采用输出阻抗100ω的驱动器(q1),以及一个4.7kω的外部dq上拉电阻至芯片vcc。为保证芯片能够正常工作,芯片vcc必须高于1-wire从器件的高电平门限vih。

图1:dq驱动(one_wire_io)

  程序库

  verilog源程序的编译无需外部库文件,而vhdl源程序则需要ieee.std_logic_1164和work.std_arith库文件。

  连接

  下表列出了1 - wire主机正常工作需要连接的引线。

  如果系统没有地址选通信号,/ads可以接为低电平,使地址锁存器直通。/en信号应由地址译码逻辑产生,在外部连接至1-wire主机模块。如果1wm是数据总线上唯一的器件,则/en可以接为低电平。连到clk上的系统时钟频率必须在3.2mhz到128mhz之间。关于详细的连接操作,请参考 [2]ds1wm11-wire master datasheet。

  例程

  下面是如何采用verilog语言创建1-wire主机例程的一个实例。

  module ds89c200 (...top level list...);

  wire [7:0] db;
  wire [2:0] addr;
  wire sysclk, read-bar,
     write-bar, master_reset,
     interrupt, addr_strobe;
  wire dq_out;

  supply1 tie1;
  supply0 tie0;

  cpu xcpu(.clk(sysclk),
       .db(db),
       .extrd-bar(read-bar),
       .extwr-bar(write-bar),
       .extaddr(addr),
       .reset(master_reset),
       .extintr(interrupt),
       .addr_st(addr_strobe),
       ... other i/o signals ...);

  onewiremaster xonewiremaster(
       .address(addr),
       .ads-bar(addr_strobe),
       .en-bar(tie0),
       .rd-bar(read-bar),
       .wr-bar(write-bar),
       .data(db),
       .intr(interrupt),
       .clk(sysclk),
       .dq(dq_out),

  • 如何嵌入1-Wire主机已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计