如何嵌入1-Wire主機
發布時間:2006/7/11 0:00:00 訪問次數:400
結構
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),
結構
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),
上一篇:為手持產品選擇電源管理方案
下一篇:如何選擇LDO