<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于CBI傳輸結(jié)構(gòu)的USB硬盤接口應(yīng)用設(shè)計(jì)

          基于CBI傳輸結(jié)構(gòu)的USB硬盤接口應(yīng)用設(shè)計(jì)

          作者: 時(shí)間:2007-06-27 來(lái)源:網(wǎng)絡(luò) 收藏
          摘要:主要介紹采用結(jié)構(gòu)進(jìn)行大容量存儲(chǔ)設(shè)備設(shè)計(jì)時(shí)應(yīng)該注意的問(wèn)題;詳細(xì)說(shuō)明對(duì)應(yīng)結(jié)構(gòu)在設(shè)計(jì)時(shí)應(yīng)進(jìn)行哪些設(shè)置和如何設(shè)置;給出用臺(tái)灣創(chuàng)品公司的T33510設(shè)計(jì)鍵盤的實(shí)例。
          關(guān)鍵詞: 大容量存儲(chǔ)設(shè)備

          引言

          USB是英文Universal Serial Bus的縮寫,中文含義是“通用串行總線”。它不是一種新的總線標(biāo)準(zhǔn),而是應(yīng)用在PC領(lǐng)域的新型接口技術(shù),具有使用方便、速度較快、連接靈活、獨(dú)立供電等特點(diǎn)。1998年后,隨著微軟在Windows 98中內(nèi)置了對(duì)USB接口的支持模塊,加上USB設(shè)備的日漸增多,USB逐步走進(jìn)了實(shí)用階段,USB協(xié)議已經(jīng)發(fā)展到2.0版本,最高速度可達(dá)480Mb/s。目前,廣泛使用的1.1版本也可達(dá)12Mb/s。

          USB協(xié)議中,對(duì)USB設(shè)備按類型進(jìn)行分類。同類型的設(shè)備擁有一些共同的行為特征和工作協(xié)議,這樣可以屏蔽不同硬件之間的差別,以便于主機(jī)(PC)對(duì)設(shè)備進(jìn)行方便、統(tǒng)一的管理。對(duì)USB大容量存儲(chǔ)設(shè)備(mass storage device)的設(shè)計(jì),國(guó)際有關(guān)機(jī)構(gòu)定義了兩種基本方式:CBI和BULK ONLY,并對(duì)各自開(kāi)發(fā)過(guò)程中應(yīng)注意的問(wèn)題進(jìn)行了規(guī)定,開(kāi)發(fā)者必須遵循其中至少一種。

          一、CBI結(jié)構(gòu)要點(diǎn)

          在CBI(Control/Bulk/Interrupt)結(jié)構(gòu)中,要用到USB協(xié)議中說(shuō)到的控制(Control)、批量輸入/輸出(Bulk in/out)、中斷(Interrupt)四種端點(diǎn)(Endpoint)。控制端點(diǎn)用來(lái)在主機(jī)和設(shè)備間傳送USB標(biāo)準(zhǔn)命令和對(duì)硬盤的控制命令集;批量輸入/輸出端點(diǎn)用來(lái)數(shù)據(jù);可選用的中斷端點(diǎn)用來(lái)通知命令的完成。

          1.數(shù)據(jù)傳輸?shù)恼f(shuō)明

          主機(jī)和CBI存儲(chǔ)設(shè)備間的通訊通過(guò)命令/數(shù)據(jù)/狀態(tài)的傳輸來(lái)實(shí)現(xiàn),就是說(shuō),協(xié)議從主機(jī)向設(shè)備傳送命令,在主機(jī)和設(shè)備間相互傳送數(shù)據(jù),從設(shè)備向主機(jī)傳送命令執(zhí)行狀態(tài),并允許主機(jī)對(duì)設(shè)備進(jìn)行重啟。USB大容量存儲(chǔ)設(shè)備應(yīng)可接收2類重啟命令和3類命令塊(command block)。2類重啟命令是:USB端口重啟和命令重啟;3類命令塊是:非數(shù)據(jù)(nondata)、數(shù)據(jù)輸入(data-in)和數(shù)據(jù)輸出(data- out)。本文只對(duì)各類命令中和CBI存儲(chǔ)設(shè)備設(shè)計(jì)相關(guān)的加以說(shuō)明,其余屬于普通USB總線傳輸?shù)膬?nèi)容可參考USB協(xié)議。

          (1)USB端口重啟

          通常用在設(shè)備死機(jī)等情況。通過(guò)主機(jī)USB端口強(qiáng)制設(shè)備重啟,詳細(xì)情況可參見(jiàn)USB協(xié)議。

          (2)命令重啟

          在使用端口重啟之前,主機(jī)也可以通過(guò)發(fā)送重啟命令來(lái)使設(shè)備重啟。在接收到該命令后,設(shè)備將依次執(zhí)行如下動(dòng)作:

          a.嘗試從正在執(zhí)行的命令或數(shù)據(jù)傳輸中退出;

          b.清除等待執(zhí)行的其它命令;

          c.清除設(shè)備緩沖區(qū)的數(shù)據(jù);

          d.按照設(shè)備所使用的子類相應(yīng)協(xié)議執(zhí)行重啟,例如執(zhí)行自檢測(cè)、對(duì)設(shè)備進(jìn)行初始化并恢復(fù)到缺省狀態(tài)。

          (3)非數(shù)據(jù)命令傳輸?shù)目偩€管理和與之相關(guān)的設(shè)備初始化等功能,詳細(xì)情況可參見(jiàn)USB協(xié)議。

          b.類相關(guān)命令。采用CBI結(jié)構(gòu)的存儲(chǔ)設(shè)備應(yīng)該在控制端點(diǎn)上支持的USB類相關(guān)命令為:Accept Device-Specific Command(ADSC)。由ADSC從主機(jī)向設(shè)備傳送命令塊。ADSC命令的起始包由表1所示8個(gè)字節(jié)組成。

          表1 ADSC起始包結(jié)構(gòu)

          字 節(jié)命 名大 小說(shuō) 明
          0bmRequestTypeByte21h指明為USB類相關(guān)命令
          1bRequestByte00h指明為ADSC命令
          2(LSB)
          wValue
          (MSB)
          Word00h保留
          300h
          4(LSB)
          wIndex
          (MSB)
          Word??hbInterfaceNumber指明設(shè)備用哪個(gè)端口接收命令
          500h保留
          6(LSB)
          wLength
          (MSB)
          Word????h指明每次傳送命令時(shí)的數(shù)據(jù)大小
          7

          需要注意的是,wLength的值由所設(shè)計(jì)的存儲(chǔ)設(shè)備所屬的子類決定,這可以在接口描述字中的bInterfaceSubClass域設(shè)置。WLength 設(shè)置好之后,每次傳輸命令數(shù)據(jù)時(shí)就必須嚴(yán)格按照這個(gè)值進(jìn)行。如果不等,設(shè)備就將認(rèn)為此次傳輸失敗并向主機(jī)發(fā)回相應(yīng)提示,而且CBI結(jié)構(gòu)的大容量存儲(chǔ)設(shè)備每次只能接收1個(gè)命令塊。在主機(jī)端,應(yīng)該把將要傳輸?shù)拿钜躁?duì)列形式排好便于傳送。下面是個(gè)ADSC命令的舉例:

          1 SOF(xA5)

          2 SETUP(xB4) ADDR(x7F) ENDP(x0)

          3 DATA0(xC3)DATA(x21 00 00:00 00:00 0C:00)

          4 ACK(x4B)

          5 SOF(xA5)

          6 OUT(x87)ADDR(x7F)ENDP(x0)

          7 DATA1(xD2) DATA(x 2A 00 00:01:23:45 00 00:)

          8 NAK(x5A)

          9 SOF(xA5)

          10 OUT(x87) ADDR(x7F) ENDP(x0)

          11 DATA1(xD2) DATA(x 2A 00 00:01:23:45 00 00:)

          12 ACK(x4B)

          13 SOF(xA5)

          14 DATA0(xC3) DATA(x 00 00 00:00)

          15 NAK(x5A)

          16 SOF(xA5)

          17 OUT(x87) ADDR(x7F) ENDP(x0)

          18 DATA0(xC3) DATA(x 00 00 00:00)

          19 ACK(x4B)

          20 SOF(xA5)

          21 IN(x96) ADDR(x7F) ENDP(x0)

          22 NAK(x5A)

          23 SOF(xA5)

          24 IN(x96) ADDR(x7F) ENDP(x0)

          25 DATA1(xD2) DATA ( )

          26 ACK(x4B)

          (4)數(shù)據(jù)輸入和數(shù)據(jù)輸出

          主機(jī)和存儲(chǔ)設(shè)備之間交換數(shù)據(jù)時(shí)所用。當(dāng)主機(jī)通過(guò)控制端點(diǎn)發(fā)出數(shù)據(jù)輸入或數(shù)據(jù)輸出命令并向設(shè)備批量輸入端點(diǎn)或發(fā)出IN PID或OUT PID后,設(shè)備開(kāi)始向主機(jī)輸出數(shù)據(jù)或從主機(jī)輸入數(shù)據(jù)直至達(dá)到主機(jī)要求的量為止。

          2.CBI存儲(chǔ)設(shè)備相關(guān)描述字設(shè)置

          按照USB協(xié)議,每一個(gè)USB設(shè)備都有一個(gè)或多個(gè)配置,每個(gè)配置對(duì)應(yīng)相應(yīng)設(shè)備的一項(xiàng)功能。配置是口的集合,通過(guò)接口指定設(shè)備如何進(jìn)行USB總線互聯(lián),而接口又是一系列端點(diǎn)的集合。從設(shè)備到端口都有相應(yīng)的描述字進(jìn)行設(shè)備,對(duì)它們的一般信息進(jìn)行說(shuō)明。

          CBI結(jié)構(gòu)存儲(chǔ)設(shè)備應(yīng)該支持下列USB描述字:

          a.設(shè)備描述字(device descriptor)。

          b.配置描述字(configuration descriptor)。

          c.接口描述字(interface descriptor)。CBI存儲(chǔ)設(shè)備至少應(yīng)支持一個(gè)數(shù)據(jù)接口。

          d.端點(diǎn)描述字(endpoint descriptor)。除用作初始化和命令傳輸?shù)目刂贫丝贓ndpoint 0外、CBI存儲(chǔ)設(shè)備還應(yīng)該支持批量輸入、批量輸出、中斷三種端點(diǎn)。

          (1)設(shè)備描述字和配置描述字

          有關(guān)這兩類描述字的結(jié)構(gòu)和含義在USB協(xié)議有關(guān)這兩類描述字的結(jié)構(gòu)和含義在USB協(xié)議有詳細(xì)介紹,本文不再作更多說(shuō)明,設(shè)計(jì)時(shí)根據(jù)實(shí)際情況加以設(shè)置即可。

          (2)接口描述字

          CBI存儲(chǔ)設(shè)備至少應(yīng)支持1個(gè)數(shù)據(jù)接口。此數(shù)據(jù)口包括最多4個(gè)端點(diǎn),即前面提到的:控制、批量輸入/輸出、中斷。其中中斷端點(diǎn)可設(shè)置為用或不用。

          接口描述字的結(jié)構(gòu)和含義在USB協(xié)議中也有介紹。這里需要說(shuō)明的有3點(diǎn):第一是描述字中的bInterfaceClass域,必須設(shè)成08h,用來(lái)說(shuō)明該設(shè)備為大容量存儲(chǔ)系統(tǒng)。第二是bInterfaceSubClass域,用來(lái)指明設(shè)計(jì)時(shí)所使用的對(duì)設(shè)備進(jìn)行控制的標(biāo)準(zhǔn)命令集。如01h指明是Reduced Block Commands,06h指明是SCSI transparent command set,設(shè)計(jì)時(shí)可根據(jù)需要選用。這些在USB Mass Storage Class Specification Overview中有詳細(xì)說(shuō)明。第三是bInterfaceProtocol域,指明存儲(chǔ)設(shè)備的設(shè)計(jì)使用體積結(jié)構(gòu)。00h和01h說(shuō)明使用CBI結(jié)構(gòu)。不同的是前者說(shuō)明設(shè)備需使用中斷端口告知系統(tǒng)命令的完成與否。

          (3)端點(diǎn)描述字

          接口所用的每一個(gè)除控制端口之外的端口都有自己的描述字。這些端口描述字總是作為配置信息的一部分在回應(yīng)GetDescriptor命令時(shí)由設(shè)備發(fā)給主機(jī)的。

          CBI存儲(chǔ)設(shè)備所支持的批量輸入/輸出和中斷端點(diǎn)描述字結(jié)構(gòu)相同。不同的是具體設(shè)置,如表2所列。

          表2 端點(diǎn)描述字結(jié)構(gòu)

          字 節(jié)命 名大 小說(shuō) 明
          0bLengthByte07h指明該描述字長(zhǎng)度
          1bDescriptorTypeByte05h指明該描述字為端點(diǎn)描述字
          2bEndpointAddressByte8?h或0?h指明該描述字在設(shè)備上的端號(hào),必須在1-15之間
          Bit0..3 指明端口號(hào)
          Bit4..6 保留,須設(shè)為0
          Bit 7 0說(shuō)明為輸出端口,1說(shuō)明為輸入端口
          3bmAttributesByte??h指明是什么端點(diǎn)描述字(批量端點(diǎn)為02h,中斷端點(diǎn)為03h)
          4wMaxPacketSizeWord00??h最大數(shù)據(jù)傳輸長(zhǎng)度
          5
          6bIntervalByte??h數(shù)據(jù)傳輸間隔(對(duì)批量端點(diǎn),設(shè)成00h)

          表3 中斷端口狀態(tài)信息結(jié)構(gòu)

          字 節(jié)命 名大 小說(shuō) 明
          0bTypeByte??h00h:指明為命令完成情況中斷
          01h-FFh:保留
          1bValueByte??h當(dāng)bType為00hjf ,
          Bit7..4:由設(shè)計(jì)者指定
          Bit3..2:保留,需設(shè)成0
          Bit1..0:命令完成狀態(tài)
          00=通過(guò)
          01=失敗
          10=相位錯(cuò)誤
          11=永久失敗

          中斷端點(diǎn)可由接口描述字的bInterfaceProtocol域的設(shè)置決定用否。如果設(shè)成00h,就需用中斷端點(diǎn)來(lái)提示命令的完成情況。當(dāng)設(shè)備需要產(chǎn)生中斷時(shí),CBI設(shè)備應(yīng)該在中斷端點(diǎn)返回2個(gè)字節(jié)的狀態(tài)信息,主機(jī)系統(tǒng)使用接口描述字的bInterfaceSubClass域的值來(lái)判別這2個(gè)字節(jié)的含義,并做出相應(yīng)的處理,這2個(gè)字節(jié)定義如表3所列。

          二、CBI結(jié)構(gòu)的USB存儲(chǔ)設(shè)備開(kāi)發(fā)實(shí)例

          這里介紹我們?cè)陂_(kāi)發(fā)數(shù)字化家庭信息系統(tǒng)中的USB時(shí)一些簡(jiǎn)單過(guò)程和經(jīng)驗(yàn)。

          1.T33510控制器

          開(kāi)發(fā)時(shí)采用的T33510是臺(tái)灣創(chuàng)品公司生產(chǎn)的以89C51為內(nèi)核,集成有USB和IDE存儲(chǔ)設(shè)備接口的控制芯片。由于集成度較高,因此在成本和開(kāi)發(fā)難度上較低。它擁有很靈活的體系結(jié)構(gòu),能夠滿足設(shè)計(jì)需要,具體說(shuō)明如下:

          *內(nèi)嵌有和89C51兼容的8位單片機(jī);

          *32K8片內(nèi)ROM;

          *7688片內(nèi)RAM;

          *可用作DMA通道的兩個(gè)5288片內(nèi)RAM;

          *擁有和89C51相似的P0、P1、P2和P3口,支持存儲(chǔ)器的外部擴(kuò)展;

          *具有省電模式;

          *擁有5個(gè)中斷源,其中復(fù)用有USB中斷源;

          *支持全速(12Mb/s)和低速(1.5Mb/s)的USB數(shù)據(jù)傳輸速率;

          *擁有Control endpoint、Bulk in/out endpoint、Interrupt endpoint等USB通訊端口。

          *和Compact Flash Specificeation Rev.1.3兼容的IDE設(shè)備接口;

          *內(nèi)置有ECC(Error Correction Code)功能;

          *使用3.3V工作電壓。

          2.T33510中有關(guān)USB寄存器設(shè)置

          為方便設(shè)備的開(kāi)發(fā),對(duì)一些常用的USB參數(shù),T33510已經(jīng)設(shè)置好,開(kāi)發(fā)時(shí)只要對(duì)其它一些比較靈活的部分在相應(yīng)寄存器中加以設(shè)置即可。這里結(jié)合本文前面討論的CBI部分加以說(shuō)明。

          對(duì)控制端點(diǎn),T33510提供了1個(gè)8位控制寄存器USBICX和4個(gè)字節(jié)的控制端點(diǎn)數(shù)據(jù)寄存器USBICMD。對(duì)中斷端點(diǎn),T33510提供8位的控制寄存器USBICR和最少2個(gè)字節(jié)最多8個(gè)字節(jié)的數(shù)據(jù)寄存器(USBICRD1~USBICRD8)。對(duì)批量輸入/輸出端點(diǎn),也有控制寄存器 USBIBULK和64個(gè)字節(jié)的FIFO提供使用。

          T33510的通用控制寄存器USBIGEN對(duì)接口描述字中bInterfaceProtocol等域進(jìn)行設(shè)置,其結(jié)構(gòu)如表4所列。

          表4 通用控制寄存器結(jié)構(gòu)

          ---SYS_OKB_INTF_PI_INTF_SCB_INTF_CSUSP_n
          ---R/WR/WR/WR/WR
          00000001
          76543210

          SYS_OK 用來(lái)通知主機(jī)所需各種描述字已準(zhǔn)備好,可以進(jìn)行訪問(wèn)。B_INTF_P用來(lái)設(shè)置bInterfaceProtocol域,當(dāng)為1時(shí),設(shè)該域?yàn)?0h;當(dāng)為 0時(shí),設(shè)該域?yàn)?1h。我們?cè)谠O(shè)計(jì)時(shí)設(shè)為1,指明使用中斷端口來(lái)說(shuō)明命令完成情況。I_INTF_SC用來(lái)設(shè)定iInterfaceSubClass域,當(dāng)為1時(shí),設(shè)該域?yàn)镕Fh;當(dāng)為0時(shí),設(shè)該域?yàn)?1h。我們?cè)谠O(shè)計(jì)時(shí)設(shè)為0,指明使用RBC命令集。B_INTF_C用來(lái)設(shè)定 bInterfaceClass域,當(dāng)為1時(shí),設(shè)該域?yàn)镕Fh;當(dāng)為0時(shí),設(shè)該域?yàn)?8h,指明為容量存儲(chǔ)系統(tǒng)。我們?cè)谠O(shè)計(jì)時(shí)將該位置0。SUSP_n為系統(tǒng)掛起標(biāo)記。

          T33510支持CBI結(jié)構(gòu)所需的4種端點(diǎn),按控制端點(diǎn)、批量輸入、批量輸出、中斷端點(diǎn)的順序依次分配端點(diǎn)號(hào)為0、1、2、3。在中斷端點(diǎn)速率寄存器USBIINTR中,可對(duì)速度進(jìn)行設(shè)置。開(kāi)發(fā)時(shí)我們?cè)O(shè)為FFh。端點(diǎn)寄存器其它域已由T33510預(yù)先設(shè)置好。

          3.系統(tǒng)結(jié)構(gòu)和軟硬件設(shè)計(jì)

          基于T33510的USB硬盤結(jié)構(gòu)如圖1所示。系統(tǒng)可分為兩部分:主機(jī)端和單片機(jī)端。USB設(shè)計(jì)分硬件和軟件兩部分。硬件包括電路設(shè)計(jì)和固件程序的編寫,通常用匯編或C語(yǔ)言;軟件分USB設(shè)備驅(qū)動(dòng)程序和USB客戶軟件。固件的編寫可采用分塊的方法,比如Main模塊、Interrupt模塊、Vector模塊、Timer模塊、Declare模塊等。通過(guò)編譯連接以.hex文件的格式寫到芯片里面去。固件主要解決以下幾個(gè)問(wèn)題:一是描述符的確定與建立;二是中斷請(qǐng)求的功能實(shí)現(xiàn);三是命令請(qǐng)求的解析;四是初始化的設(shè)置。設(shè)備驅(qū)動(dòng)程序和客戶軟件位于主機(jī)端。

          T3351 所支持的RBC命令集包括INQUIRY、READ FORMAT CAPASCITIES、READ、WTITE等等,有關(guān)RBC命令可從相應(yīng)協(xié)議中得到。系統(tǒng)通過(guò)READ命令讀取硬盤的啟動(dòng)扇區(qū),并分析其文件系統(tǒng)結(jié)構(gòu),然后讀取其它扇區(qū)進(jìn)行文件的操作。T33510的IDE接口設(shè)計(jì)有對(duì)硬盤操作所需的各個(gè)寄存器,符合Compact Flash Specification Rev.1.3協(xié)議,給程序編制帶來(lái)了很大方便。由于所有的文件系統(tǒng)和數(shù)據(jù)的分析都交由PC端來(lái)執(zhí)行,因此在IDE接口上,只需提供基本的 “Sectors Read”和“Sectors Write”等命令就可以了。主程序流程如圖2所示。

          下面給出對(duì)硬盤一個(gè)扇區(qū)進(jìn)行讀寫的C語(yǔ)言程序段。

          讀扇區(qū):void ReadOneSecoter (Dword LBA)

          {IDE_WRITE_1F6(0xE0); Master LBA模式

          IDE_WRITE_1F2(1); //扇區(qū)數(shù)

          IDE_WRITE_1F3(LBA%0x100);//LBA_7_0位

          IDE_WRITE_1F4((LBA/0x100)%0x100);//LBA_15_8位

          IDE_WRITE_1F5((LBA/0x10000)%0x100);

          // LBA_23_16位

          IDE_WRITE_1F7(0x20); //命令:讀扇區(qū)

          While(IdeRead1F7()!=0x58);

          IdeReadData();

          while(!cf_sfr_ready);

          while(IdeRead1F7()!=0x50);}

          //--------------------------------------------------------------------

          寫扇區(qū):void WriteOneSecoter(Dword LBA)

          {IDE_WRITE_1F6(0xE0); //Master LBA模式

          IDE_WRITE_1F2(1); //扇區(qū)數(shù)

          IDE_WRITE_1F3(LBA%0x100); //LBA_7_0位

          IDE_WRITE_1F4((LBA/0x100)%0x100);

          //LBA_15_8位

          IDE_WRITE_1F5((LBA/0x10000)%0x100);

          //LBA_23_16位

          IDE_WRITE_1F7(0x30); //命令:寫扇區(qū)

          while (IdeRead1F7()!0x58);

          IdeWriteData( );

          while (!cf_sfr_ready); //等待結(jié)束

          while (IdeRead1F7() !=0x50);}

          結(jié)束語(yǔ)

          CBI結(jié)構(gòu)只是USB存儲(chǔ)設(shè)備設(shè)計(jì)時(shí)可供選擇的一種,此外還有BULK-ONLY結(jié)構(gòu)。應(yīng)該說(shuō),USB硬盤的開(kāi)發(fā)除結(jié)構(gòu)的選擇,還涉及許多其它東西,比如RBC命令集的合作、ISE接口的協(xié)議、主機(jī)端驅(qū)動(dòng)程序等很多因素。本文在此不能一一詳述。

          USB硬盤驅(qū)動(dòng)器為小型辦公、家庭辦公、個(gè)為及網(wǎng)絡(luò),提供了一種快速方便地解決存儲(chǔ)問(wèn)題的途徑。

          由于USB技術(shù)連接方式和速度上相對(duì)傳統(tǒng)的并口、串口等方式的優(yōu)勢(shì),必將極大改變計(jì)算機(jī)外設(shè)的設(shè)計(jì)方式。新出臺(tái)的USB的速度可達(dá)480Mb/s,可以改善以前版本速度不是很快的缺憾,將進(jìn)一步擴(kuò)展USB應(yīng)用的范圍。



          關(guān)鍵詞: CBI USB 傳輸 硬盤接口

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();