![LINUX設(shè)備驅(qū)動(dòng)之PCI設(shè)備驅(qū)動(dòng)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/8f63ba14-efb4-4bf6-b5cf-54d858a1654e/8f63ba14-efb4-4bf6-b5cf-54d858a1654e1.gif)
![LINUX設(shè)備驅(qū)動(dòng)之PCI設(shè)備驅(qū)動(dòng)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/8f63ba14-efb4-4bf6-b5cf-54d858a1654e/8f63ba14-efb4-4bf6-b5cf-54d858a1654e2.gif)
![LINUX設(shè)備驅(qū)動(dòng)之PCI設(shè)備驅(qū)動(dòng)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/8f63ba14-efb4-4bf6-b5cf-54d858a1654e/8f63ba14-efb4-4bf6-b5cf-54d858a1654e3.gif)
![LINUX設(shè)備驅(qū)動(dòng)之PCI設(shè)備驅(qū)動(dòng)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/8f63ba14-efb4-4bf6-b5cf-54d858a1654e/8f63ba14-efb4-4bf6-b5cf-54d858a1654e4.gif)
![LINUX設(shè)備驅(qū)動(dòng)之PCI設(shè)備驅(qū)動(dòng)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/8f63ba14-efb4-4bf6-b5cf-54d858a1654e/8f63ba14-efb4-4bf6-b5cf-54d858a1654e5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LINUX設(shè)備驅(qū)動(dòng)之PCI設(shè)備wan gxy該文檔是整理PCI驅(qū)動(dòng)時(shí)參考網(wǎng)上資料編寫(xiě),供大家參考交流學(xué)習(xí)。1) PCI總線總線由電氣接口和編程接口組成。先介紹PCI總線的電氣接口。該總線具有 以下特性: 總線位寬為32位,可擴(kuò)充到64位,數(shù)據(jù)總線和地址總線復(fù)用。 總線的時(shí)鐘頻率為33MHz隨著PCI總線的發(fā)展,總線的時(shí)鐘頻率在提 高,PCI-X 1.0 總線的時(shí)鐘頻率為 66MHz/100MHz/133MH到 PCI-X 2.0 的時(shí)候,總線的時(shí)鐘頻率發(fā)展到 266MHz/533MHz/1066M,不過(guò)PCI總 線和PCI-X總線硬件結(jié)構(gòu)上完全兼容。 支持全自動(dòng)配置,資源分配,即插即用。 總線
2、規(guī)范獨(dú)立于微處理器,通用性好。 PCI設(shè)備可以完全作為主控設(shè)備控制總線。 采用中央集中式總線仲裁。2) PCI設(shè)備引腳介紹AID|i AR|PARPAH.M付擴(kuò)充(RbVD卜、£1丄IDSELSIX*Ni:伸尿(只有總it匸擰同iltvtCLKH5T11)1Tlx、TCKTKsT圖(一) PCI兼容設(shè)備引腳示意圖在一個(gè)PCI應(yīng)用系統(tǒng)中,如果某個(gè)PCI設(shè)備獲得了 PCI總線的控制權(quán),就稱(chēng) 該設(shè)備是主設(shè)備,被主設(shè)備選中以進(jìn)行數(shù)據(jù)傳輸?shù)腜CI設(shè)備稱(chēng)為從設(shè)備,對(duì)于PCI兼容設(shè)備的引腳主要分為兩部分:必需引腳和可選引腳。對(duì)應(yīng)主設(shè) 備至少需要49個(gè)引腳,對(duì)應(yīng)從設(shè)備至少需要 47個(gè)引腳。必需部分對(duì)
3、應(yīng)圖(一) 中的左側(cè)部分,可選部分對(duì)應(yīng)圖(一)中右側(cè)部分。PCI兼容設(shè)備引腳共有100根,下面對(duì)這些信號(hào)進(jìn)行 介紹,介紹前先對(duì) 引腳信號(hào)的類(lèi)型做一個(gè)簡(jiǎn)介。PCI引腳信號(hào)按照數(shù)據(jù)傳輸?shù)姆较蚝碗娐夫?qū)動(dòng)的特 性分為五種類(lèi)型。 in:輸入信號(hào) out:輸出信號(hào) t/s:雙向三態(tài)I/O驅(qū)動(dòng)信號(hào)(三態(tài):高電平、低電平和高阻抗) s/t/s:持續(xù)雙向三態(tài)I/O驅(qū)動(dòng)信號(hào),表示持續(xù)且低電平有效的三態(tài)信號(hào)。在某個(gè)時(shí)刻只可屬于一個(gè)主設(shè)備,并被其驅(qū)動(dòng)。這種信號(hào)從低電平到高阻 抗之前,必需保證至少在一個(gè)時(shí)鐘周期處于高電平狀態(tài),即低電平-> 至少一個(gè)時(shí)鐘周期高電平-> 高阻抗。另一個(gè)主設(shè)備要驅(qū)動(dòng)該信號(hào),至少要
4、 等該信號(hào)的原有驅(qū)動(dòng)者將其釋放(變?yōu)楦咦杩範(fàn)顟B(tài))一個(gè)時(shí)鐘周期后,才能 開(kāi)始。如果這種信號(hào)處于非驅(qū)動(dòng)狀態(tài),在有新主設(shè)備驅(qū)動(dòng)它之前應(yīng)采取上拉措施, o/d:漏極開(kāi)路即高阻狀態(tài),適用于輸入/輸出,其可獨(dú)立輸入/輸出低電 平和高阻狀態(tài),若需要產(chǎn)生高電平,則需使用外部上拉電阻??勺骶€或,允許多個(gè)設(shè)備共同使用。F面對(duì)各個(gè)引腳信號(hào)做介紹信號(hào)標(biāo)識(shí)信號(hào)名稱(chēng)信號(hào)類(lèi)型概述CLK時(shí)鐘in為PCI兼容設(shè)備上的接口提供時(shí)鐘信 號(hào)及總線的仲裁提供時(shí)序,PCI-2.2規(guī) 范中最高時(shí)鐘頻率33MHz,除了 RST 和四個(gè)中斷引腳外,其它引腳信號(hào)都 是在CLK上升沿采樣,所有的時(shí)間參 數(shù)都是基于這個(gè)上升沿而定義的。CLK最小頻率
5、0Hz。RST復(fù)位信號(hào)in使PCI特定的寄存器、配置寄存器和 定時(shí)器相關(guān)的信號(hào)置于一個(gè)固定的狀 態(tài)。所有的PCI引腳信號(hào)驅(qū)動(dòng)到它的 起始狀態(tài)。通常情況下,意味著這些引腳處 于高阻態(tài),SERR被浮空,REQ和GNT 都必須是高阻態(tài),如果不能提供高阻 態(tài)輸出的話,就把SBO和SDONE驅(qū) 動(dòng)到低電平狀態(tài)。為防止數(shù)據(jù)地址線 ADxx、C/BEx、PAR 引腳在復(fù)位 期間被浮空,如果要使用,也只能驅(qū) 動(dòng)到低電平。REQ64在復(fù)位結(jié)束后有 效。AD31-0地址數(shù)據(jù)線t/s在FRAME有效時(shí),是地址周期, AD31-0包含一個(gè)總線地址,對(duì)于配 置空間和儲(chǔ)存器空間,這是一個(gè)雙字 地址,對(duì)于I/O空間,這是一
6、個(gè)字節(jié) 地址,高位 AD31-24低位 AD7-0; 在IRDY和TRDY同時(shí)有效時(shí),是數(shù)據(jù)周期,一次PCI總線的傳輸中包含 了一個(gè)地址信號(hào)周期和1個(gè)數(shù)據(jù)周 期。C/BE3-0總線命令和 字節(jié)使能信 號(hào)t/s在地址周期內(nèi),這四條線上傳輸?shù)氖?總線命令,在數(shù)據(jù)周期,傳輸?shù)氖亲?節(jié)使能信號(hào),表示在整個(gè)數(shù)據(jù)周期, AD31-0上哪些字節(jié)為有效數(shù)據(jù)。PAR奇偶校驗(yàn) 信號(hào)t/sAD31-0和C/BE3-0上的數(shù)據(jù)奇偶 校驗(yàn),通常PCI傳輸時(shí)要求奇偶校驗(yàn)。PAR與AD31-0有相同的時(shí)序,但延 時(shí)一個(gè)時(shí)鐘周期,在地址周期后一個(gè) 時(shí)鐘周期,PAR穩(wěn)定且有效。對(duì)于數(shù) 據(jù)周期,在寫(xiě)傳輸過(guò)程中,PAR在IRDY有
7、效后延遲一個(gè)時(shí)鐘周期穩(wěn)定 且有效,一旦PAR有效,在數(shù)據(jù)周期 完成后的一個(gè)時(shí)鐘周期內(nèi)它必須保持 有效。在讀傳輸中,PAR在TRDY有 效后延遲一個(gè)時(shí)鐘周期穩(wěn)定且有效, 一旦PAR有效,在數(shù)據(jù)周期完成后的 一個(gè)時(shí)鐘周期內(nèi)它必須保持有效。 在地址周期和寫(xiě)數(shù)據(jù)周期,總線的主 設(shè)備驅(qū)動(dòng)PAR,在讀數(shù)據(jù)周期,目標(biāo) 設(shè)備驅(qū)動(dòng)PAR。FRAME幀周期信號(hào)s/t/s由總線的主設(shè)備驅(qū)動(dòng),表示一次 PCI 傳輸?shù)拈_(kāi)始和持續(xù)時(shí)間,F(xiàn)RAME有 效表示總線傳輸開(kāi)始,當(dāng)FRAME持 續(xù)有效說(shuō)明總線傳輸繼續(xù)進(jìn)行。當(dāng) FRAME無(wú)效表示正在傳輸?shù)淖詈笠?個(gè)字節(jié)。IRDY主設(shè)備準(zhǔn)備 好信號(hào)s/t/s該信號(hào)有效表明主設(shè)備已經(jīng)具
8、有完成 一次PCI傳輸?shù)哪芰?,該信?hào)需與 TRDY信號(hào)配合使用,這二者都有效 才能進(jìn)行數(shù)據(jù)傳輸,否則即為等待周 期,在寫(xiě)周期,該信號(hào)有效表示 AD31-0線上數(shù)據(jù)已經(jīng)建立,在讀周 期,該信號(hào)有效表示主設(shè)備已經(jīng)準(zhǔn)備 好接收數(shù)據(jù)。TRDY從設(shè)備準(zhǔn)備 好信號(hào)s/t/s該信號(hào)有效表明從設(shè)備已經(jīng)做好完成 當(dāng)前數(shù)據(jù)傳輸?shù)臏?zhǔn)備工作,同樣該信 號(hào)需與IRDY配合使用,二者同時(shí)有 效才能進(jìn)行數(shù)據(jù)傳輸,在寫(xiě)周期,該 信號(hào)有效表示從設(shè)備做好接收數(shù)據(jù)準(zhǔn) 備,在讀周期,該信號(hào)有效表示數(shù)據(jù) 已經(jīng)送到AD31-0線上,同理,二者任何一個(gè)無(wú)效時(shí)都為等待周期。STOP從設(shè)備要求 停止當(dāng)前數(shù) 據(jù)傳輸信號(hào)s/t/s該信號(hào)有效,表示
9、從設(shè)備要求主設(shè)備 停止當(dāng)前數(shù)據(jù)傳輸操作。LOCK總線鎖定信 號(hào)s/t/s鎖定操作只針對(duì)PCI橋設(shè)備,鎖定表 明一個(gè)需要多次傳輸才能完成的原子 操作。該信號(hào)有效,對(duì)一個(gè)沒(méi)有處于 鎖疋狀態(tài)的PCI橋設(shè)備來(lái)說(shuō)表示 個(gè) 非獨(dú)占的傳輸正在進(jìn)行。在PCI總線 上,允許開(kāi)始一次傳輸并不代表?yè)碛?對(duì)LOCK信號(hào)的控 制權(quán)。取得對(duì) LOCK信號(hào)的控制權(quán)要遵循一些協(xié)議 和GNT信號(hào)的配合。DEVSEL從設(shè)備選中信號(hào)s/t/s該信號(hào)有效,從設(shè)備已經(jīng)解碼主設(shè)備 發(fā)出的地址。IDSEL初始化設(shè)備 選擇信號(hào)in配置空間讀寫(xiě)時(shí)的片選信號(hào)。PERR數(shù)據(jù)奇偶校 驗(yàn)錯(cuò)誤報(bào)告 信號(hào)s/t/s該引腳只用于反饋在除特殊周期外的 其它傳
10、輸過(guò)程中的數(shù)據(jù)奇偶校驗(yàn)錯(cuò) 誤,PERR維持三態(tài),在檢測(cè)到傳輸 數(shù)據(jù)中的奇偶校驗(yàn)錯(cuò)誤后,在傳輸數(shù) 據(jù)結(jié)束后的兩個(gè)時(shí)鐘周期內(nèi),由接收 數(shù)據(jù)的單元驅(qū)動(dòng)PERR有效,至少要 持續(xù)一個(gè)時(shí)鐘周期。在被釋放到三態(tài) 前,PERR必須驅(qū)動(dòng)到高電平一個(gè)時(shí) 鐘周期,只有發(fā)出DEVSEL的單元才 能發(fā)出PERR。SERR系統(tǒng)出錯(cuò)信 號(hào)o/d用于反饋地址奇偶錯(cuò)誤、特殊周期命 令中的數(shù)據(jù)奇偶錯(cuò)誤和將引起重大事 故的其它災(zāi)難行的系統(tǒng)錯(cuò)誤,如果一 個(gè)設(shè)備不想產(chǎn)生不可屏蔽(NMI),就 可以用SERR信號(hào)反饋給總線。SERR 是單純的漏極開(kāi)路信號(hào),由反饋錯(cuò)誤 的設(shè)備驅(qū)動(dòng),在一個(gè)總線時(shí)鐘周期內(nèi) 有效,SERR與總線時(shí)鐘同步,并滿
11、 足所有總線信號(hào)的建立與保持時(shí)間的 要求,SERR信號(hào)釋放到無(wú)效狀態(tài)由 系統(tǒng)設(shè)計(jì)者提供上拉電阻實(shí)現(xiàn),從無(wú) 效狀態(tài)恢復(fù)到有效狀態(tài)需2-3個(gè)時(shí)鐘 周期,支持SERR的設(shè)備在采樣到 SERR有效時(shí),就向操作系統(tǒng)報(bào)告系 統(tǒng)錯(cuò)誤。REQ總線請(qǐng)求信 號(hào)t/s該信號(hào)只對(duì)主設(shè)備有效,是一個(gè)點(diǎn)對(duì) 點(diǎn)信號(hào),用于向仲裁器說(shuō)明某個(gè)主設(shè)備想使用總線。GNT總線允許信 號(hào)t/s該信號(hào)僅對(duì)主設(shè)備有效,也是一個(gè)點(diǎn) 對(duì)點(diǎn)信號(hào),仲裁器想申請(qǐng)總線的主設(shè) 備說(shuō)明其對(duì)總線的操作已經(jīng)得到批 準(zhǔn)。INTA中斷A信號(hào)o/d常用于單一功能設(shè)備請(qǐng)求一次中斷。INTB中斷B信號(hào)o/d用于多功能設(shè)備請(qǐng)求一次中斷。備注一INTC中斷C信號(hào)o/d:用于
12、多功能設(shè)備請(qǐng)求一次中斷。INTD中斷D信號(hào)o/d用于多功能設(shè)備請(qǐng)求一次中斷。SBO監(jiān)視補(bǔ)償信 號(hào)in /out該信號(hào)有效,說(shuō)明對(duì)某修改行的一次 命中,所訪問(wèn)的數(shù)據(jù)無(wú)效,當(dāng)SBO信 號(hào)無(wú)效而SDONE信號(hào)有效,說(shuō)明PCI 主設(shè)備正在訪冋存儲(chǔ)器的有效行并可 進(jìn)行高速緩存的操作。SDONE監(jiān)視完成信 號(hào)in /out表示處理器CACHE對(duì)主存的監(jiān)視狀 態(tài),無(wú)效表示監(jiān)視仍在進(jìn)行,否則便 是監(jiān)視已完成。AD63-32地址數(shù)據(jù)復(fù) 用硬件t/s提供32個(gè)附加位,在地址周期(使用 DAC指令且REQ64已有效)傳輸64 位地址的咼32位,如果沒(méi)有咼32位 地址,這些引腳就被保留,其上的數(shù) 據(jù)是穩(wěn)疋的,但值是不
13、確疋的,在數(shù) 據(jù)周期,當(dāng)REQ64和ACK64都有效 時(shí),傳輸64位數(shù)據(jù)中的高32位。C/BE7-4總線命令和 字節(jié)允許復(fù) 用信號(hào)t/s在一個(gè)地址周期(使用DAC指令且 REQ64已有效)在C/BE7-4傳輸?shù)氖?有效的總線命令;如無(wú),這些引腳被 保留,其值不確定,在數(shù)據(jù)周期當(dāng)REQ64和 ACK64都有效時(shí), C/BE7-4是字節(jié)允許,說(shuō)明哪些字節(jié)上含有有效數(shù)據(jù)。REQ64請(qǐng)求傳輸 64位數(shù)據(jù) 信號(hào)t/s當(dāng)其被當(dāng)前總線的主設(shè)備有效驅(qū)動(dòng) 時(shí),說(shuō)明該總線的主設(shè)備想做64位的 傳輸,REQ64和FRAME有相同的時(shí) 序,復(fù)位結(jié)束后,若REQ64有效,該 設(shè)備就已連接64位通道上,否則無(wú)。ACK64
14、64位傳輸 的應(yīng)答信號(hào)s/t/s從設(shè)備驅(qū)動(dòng)該信號(hào),說(shuō)明從設(shè)備能夠 進(jìn)行64位數(shù)據(jù)傳輸,ACK64和 DEVSEL有相同的時(shí)序。PAR64高偶校驗(yàn)信 號(hào)t/s是 AD63-32和 C/BE7-4的偶校驗(yàn) 位,當(dāng)REQ64有效且C/BE7-4上有DAC命令時(shí),第一地址周期后的一個(gè) 時(shí)鐘周期PAR64有效,DAC命令的 第二個(gè)地址周期后的那一個(gè)時(shí)鐘周期PAR64也有效,在數(shù)據(jù)周期中,當(dāng) REQ64和ACK64都有效時(shí),讀操作 中,TRDY有效后,PAR64穩(wěn)定且有 效,在寫(xiě)操作中,IRDY有效后,PAR64 穩(wěn)定且有效。一旦PAR64 有效,必須 保持有效指導(dǎo)數(shù)據(jù)周期完成后一個(gè)時(shí) 鐘周期的時(shí)間。(P
15、AR64時(shí)序與 AD63-32相同但延遲一個(gè)時(shí)鐘周 期),在地址周期和寫(xiě)數(shù)據(jù)周期內(nèi),總 線主設(shè)備驅(qū)動(dòng)PAR64,在讀數(shù)據(jù)周期 內(nèi),從設(shè)備驅(qū)動(dòng) PAR64。備注二TDI測(cè)試數(shù)據(jù)輸 入信號(hào)in將測(cè)試數(shù)據(jù)和測(cè)試指令串行移入到設(shè) 備中。TDO測(cè)試輸出信 號(hào)out將測(cè)試數(shù)據(jù)和測(cè)試指令串行移出到設(shè) 備。TCK測(cè)試時(shí)鐘信 號(hào)in記錄狀態(tài)信息和測(cè)試設(shè)備的輸入輸出 數(shù)據(jù)。TMS測(cè)試模式選 擇in控制設(shè)備中的JTAG控制器狀態(tài)。TRST測(cè)試復(fù)位信 號(hào)in異步初始化JTAG控制器備注一多功能設(shè)備的任何一種功能都能連接到任何一條中短線上,中斷引腳寄存器決定該功能用那一條中斷線去請(qǐng)求中斷。如果一個(gè)設(shè)備只用了一條中斷線,
16、就是用INTA,如果用兩條就使用INTA和INTB,依,此類(lèi)推。對(duì)于多功能設(shè)備,可以是所有功能用一條中斷線,也可以每種功能使用自己的中斷線,最多四種 功能。備注二在總線主設(shè)備和從設(shè)備之間,64位傳輸是動(dòng)態(tài)協(xié)商的,在每個(gè)地址周期進(jìn)行一次,而且,只有主存命令支持64位傳輸,總線主設(shè)備使 REQ64有效,從設(shè)備則通過(guò)使 ACK64有效加以應(yīng)答,REQ64和ACK64都 是外部上拉的,保證 64位和32位單元混用,一旦64位傳輸建立,就一直保持到這次傳輸結(jié)束。3) PCI總線上的操作總線命令總線命令是由主設(shè)備發(fā)向從設(shè)備,其作用是規(guī)定主設(shè)備正在請(qǐng)求的傳輸類(lèi)型,在地址周期,被編碼的總線命它出現(xiàn)在C/BE3
17、-0引腳上,從設(shè)備的地址出現(xiàn)在AD地址數(shù)據(jù)復(fù)用引腳上。C/BE3-0命令類(lèi)型命令作用0000中斷應(yīng)答是一個(gè)讀命令,主設(shè)備從申請(qǐng)中斷的從設(shè)備中讀取中斷向量。0001特殊周期通報(bào)處理器狀態(tài)或在各個(gè)從設(shè)備之間傳遞信息。0010I/O讀從一個(gè)映射到I/O地址空間的設(shè)備中讀取數(shù)據(jù)。0011I/O寫(xiě)向一個(gè)映射到I/O地址空間的設(shè)備中讀取數(shù)據(jù)。0100保留留作將來(lái)使用,任何設(shè)備也不允許對(duì)保留命令做出反應(yīng)。0101保留留作將來(lái)使用,任何設(shè)備也不允許對(duì)保留命令做出反應(yīng)。0110存儲(chǔ)器讀從一個(gè)映射到內(nèi)存空間的設(shè)備上讀取數(shù)據(jù)。0111存儲(chǔ)器寫(xiě)向一個(gè)映射到內(nèi)存空間的設(shè)備上寫(xiě)入數(shù)據(jù)。1000保留留作將來(lái)使用,任何設(shè)備也
18、不允許對(duì)保留命令做出反應(yīng)。1001保留留作將來(lái)使用,任何設(shè)備也不允許對(duì)保留命令做出反應(yīng)。1010配置讀從每個(gè)設(shè)備的配置空間讀取數(shù)據(jù)。1011配置寫(xiě)向每個(gè)設(shè)備的配置空間寫(xiě)入數(shù)據(jù)。1100儲(chǔ)存器多行讀試圖在主設(shè)備斷開(kāi)連接之前讀取多行高速緩存的數(shù)據(jù),內(nèi)存控制器應(yīng)保證,只要FRAM有效,就連續(xù)不斷地發(fā)內(nèi)存讀取請(qǐng)求,該命令預(yù)定用于大塊連續(xù)數(shù)據(jù)的傳輸。1101雙地址周期該命令用于傳輸 64位地址給支持64位尋址的設(shè)備,只支持 32位尋址的設(shè)備 不對(duì)該命令做岀反應(yīng)。1110存儲(chǔ)器一行讀該命令與內(nèi)存讀命令不同之處在于它還表示主設(shè)備要求讀取多于2個(gè)32位的數(shù)據(jù)周期,即一次讀取緩存范圍內(nèi)一行上的所有數(shù)據(jù)。1111
19、存儲(chǔ)器寫(xiě)和無(wú)效該命令與內(nèi)存寫(xiě)命令的不同之處是它要保證最小的傳輸量是一個(gè)高速緩存行, 主設(shè)備要在一次PCI傳輸中,寫(xiě)完被尋址的高速緩存行的全部字節(jié)。命令的使用規(guī)則所有PCI設(shè)備都是配置(讀和寫(xiě))命令的目標(biāo)設(shè)備,必須做出應(yīng)答。對(duì) 其他的命令則有選擇余地,I/O讀或?qū)懨钍强蛇x的。命令執(zhí)行規(guī)則 保證I/O讀或?qū)懨畹膱?zhí)行順序。有重定位功能或寄存器的目標(biāo)設(shè)備 要求能通過(guò)配置寄存器映射到存儲(chǔ)器空間,并響應(yīng)基本的存儲(chǔ)器讀或 寫(xiě)命令,這就為沒(méi)有I/O空間(僅X86處理器有)設(shè)備的使用提供了一 種選擇。當(dāng)這種映射實(shí)現(xiàn)時(shí),無(wú)論設(shè)備映射到I/O空間還是存儲(chǔ)器命令執(zhí)行規(guī)則都由系統(tǒng)設(shè)計(jì)者來(lái)保證??偩€主設(shè)備可以根據(jù)需要
20、使用任選指令,從設(shè)備也可根據(jù)需要而選 用指令,但如果選用了基本指令,就必須支持所有存儲(chǔ)器命令,包括 高速緩存寫(xiě)命令、高速緩存行讀命令和存儲(chǔ)器多行讀命令。如果不能 全部使用,這些為優(yōu)化性能而設(shè)的命令必需轉(zhuǎn)化為基本的存儲(chǔ)器命令。例如,一個(gè)從設(shè)備可以不實(shí)現(xiàn)存儲(chǔ)器行讀命令,但是它必須能接 受該命令的請(qǐng)求 ,并按存儲(chǔ)器讀命令來(lái)處理。同理,一個(gè)從設(shè)備可 以不實(shí)現(xiàn)存儲(chǔ)器寫(xiě)但它必須能接受該命令的請(qǐng)求, 并按存儲(chǔ)器寫(xiě)命令 來(lái)處理。對(duì)于進(jìn)/ 出系統(tǒng)存儲(chǔ)器的塊數(shù)據(jù)傳輸,對(duì)能支持高速緩存寫(xiě)和高速 緩存行讀命令的主設(shè)備,建議采用這兩天命令,如果由于某種原因, 總線主設(shè)備不能使用性能已優(yōu)化的命令, 就用存儲(chǔ)器讀和存儲(chǔ)器寫(xiě)
21、命 令。對(duì)于使用存儲(chǔ)器讀命令的總線主設(shè)備,對(duì)所有命令都可作任意長(zhǎng) 度的操作, 但最優(yōu)方法如下, 如果高速緩存寫(xiě)命令要求實(shí)現(xiàn)高速緩存 行范圍寄存器,存儲(chǔ)器讀命令也使用它, 使用高速緩存行范圍寄存器時(shí)的最優(yōu)方法: 存儲(chǔ)器讀命令:當(dāng)突發(fā)傳輸少于半條高速緩存行數(shù)據(jù)時(shí)使用。 高速緩存行存儲(chǔ)器讀命令: 當(dāng)突發(fā)傳輸半條到三條高速緩存行數(shù)據(jù)時(shí) 使用。 存儲(chǔ)器重復(fù)讀命令:當(dāng)突發(fā)傳輸三條以上高速緩存行數(shù)據(jù)時(shí)使用。 不使用高速緩存行范圍寄存器時(shí)的最優(yōu)方法: 存儲(chǔ)器讀命令:當(dāng)突發(fā)傳輸兩個(gè)或更少數(shù)據(jù)時(shí)使用。 高速緩存行存儲(chǔ)器讀命令:當(dāng)突發(fā)傳輸三到 12 個(gè)數(shù)據(jù)時(shí)使用。 存儲(chǔ)器重復(fù)讀命令:長(zhǎng)突發(fā)傳輸數(shù)據(jù)時(shí)使用。PCI 協(xié)
22、議基礎(chǔ)在 PCI 總線上, 總線的基本傳輸機(jī)制是突發(fā)傳輸, 一個(gè)突發(fā)傳輸由一 個(gè)地址周期和大于等于一個(gè)數(shù)據(jù)周期組成。 PCI 總線支持內(nèi)存空間和I/O地址空間的突發(fā)傳輸。PCJ pr*durlCompofinri &«3b F maiq5V 32-bil PCI Cardc3 3V&1U PCI Card】ii川川 iriiiiiiiiiii【川川汕川iiiiiiiiiiiiiii川riiuiiiiiiiiiiiii川jmumu miuminimm F5V &4-W PCi CardLw mnmnim umiUnivsal I3 3V & 5V) 64
23、巾ii PCI Cax川iiniiL川丄一;iru小ii川川hi川川3.3V 34-btl PClSlol5V 32-brt PCI Slot5V54-bi1 PCI Slot編程接口:每個(gè)PCI設(shè)備由一個(gè)總線編號(hào)、一個(gè)設(shè)備編號(hào)及一個(gè)功能編號(hào)來(lái)標(biāo)識(shí), PCI規(guī)范 允許單個(gè)系統(tǒng)擁有高達(dá)256個(gè)總線,linux目前支持PCI域,每個(gè)PCI域可擁有 最多256個(gè)總線,每個(gè)總線可支持32個(gè)設(shè)備,每個(gè)設(shè)備可具有最多8個(gè)功能。每種功能都可以在硬件級(jí)由一個(gè)16位的地址來(lái)標(biāo)識(shí)。驅(qū) 動(dòng)程序使用pci_dev 數(shù)據(jù)結(jié)構(gòu)來(lái)訪問(wèn)設(shè)備??偩€上每個(gè)外設(shè)擁有三個(gè)地址空間:內(nèi)存位置、I/O端口和配置寄存器,內(nèi)存位 置和I/O
24、端口由同一 PCI總線上的所有設(shè)備共享,大多數(shù)PCI總線上的外設(shè)會(huì)把寄存器映射到某個(gè)內(nèi)存地址區(qū)段,此時(shí)的內(nèi)存地址 區(qū)段就是I/O內(nèi)存。分析I/O端口和I/O內(nèi)存的區(qū)別:MIPS、ARM和 PowerPC等平臺(tái)的I/O和主存采用的是統(tǒng)一編址的方式,它們將 I/O空間映射到內(nèi)存,采用與內(nèi)存相同的匯編指令(load和store)來(lái)讀寫(xiě)設(shè)備, 這種方式稱(chēng)為I/O內(nèi)存;x86平臺(tái)的I/O和主存采用的是獨(dú)立編址的方式,CPU 有專(zhuān)門(mén)的線路來(lái)訪問(wèn)I/O,而且有專(zhuān)門(mén)的匯編 指令(in和out)來(lái)讀寫(xiě)設(shè)備,這 種方式稱(chēng)為I/O端口。每種外設(shè)都是通過(guò)讀寫(xiě)寄存器進(jìn)行控制。 在硬件層,內(nèi)存區(qū)域和I/O區(qū)域沒(méi)有概 念上
25、的區(qū)別,他們都是通過(guò)向地址總線和控制總線發(fā)送電平信號(hào)進(jìn)行訪問(wèn), 再通 過(guò)數(shù)據(jù)總線讀寫(xiě)數(shù)據(jù)。每個(gè)PCI槽有四個(gè)中斷引腳,每個(gè)外設(shè)功能可使用一個(gè),中斷線共享,PCI總線中的I/O空間使用32位地址總線,PCI配置空間中每個(gè)設(shè)備功能有256個(gè)字節(jié)組成(PCI-E有4KB的配置空間),配置寄存器的布 局是標(biāo)準(zhǔn)化的(64)注意是小端模式。vendorlD :用于表示硬件制造商的16位寄存器。Device ID :由制造商選擇,該ID通常與Ven dor ID生成一個(gè)唯一的32位硬件 設(shè)備標(biāo)識(shí)符,class :每個(gè)外設(shè)都屬于一個(gè)類(lèi).類(lèi)寄存器是一個(gè)16-位值,它的高8位標(biāo)識(shí)" 基類(lèi)"(或
26、者群).例如,"ethernet" 和"token ring" 是2個(gè)類(lèi)都屬于"network" 群,而"serial" 和"parallel"屬于"communication"群.一些驅(qū)動(dòng)可支持幾個(gè)類(lèi)似的設(shè)備,每個(gè)都有一個(gè)不同的簽名但是都屬于同樣的類(lèi);這些驅(qū)動(dòng)可依賴(lài)類(lèi) 寄存器標(biāo)識(shí)它們的外設(shè)。subsystem ven dorIDsubsystem deviceID這些字段可用來(lái)進(jìn)一步標(biāo)識(shí)一個(gè)設(shè)備.如果芯片對(duì)于本地總線是一個(gè)通 用接口芯片,它常常被用在幾個(gè)完全不同的地方,并且
27、驅(qū)動(dòng)必須標(biāo)識(shí)出 它在與之通話的實(shí)際設(shè)備.子系統(tǒng)標(biāo)志用作此目的.使用這些不同的標(biāo)識(shí)符,一個(gè)PCI驅(qū)動(dòng)可告知內(nèi)核它支持什么類(lèi)型的設(shè)備. struct pci_device_id結(jié)構(gòu)被用來(lái)定義一個(gè)驅(qū)動(dòng)支持的不同類(lèi)型PCI設(shè)備的列表這個(gè)結(jié)構(gòu)包含不同的成員:u32 ven dor;u32 device;這些指定一個(gè)設(shè)備的PCI供應(yīng)商和設(shè)備ID.如果驅(qū)動(dòng)可處理任何供應(yīng) 商或者設(shè)備ID,值PCI_ANY_ID應(yīng)當(dāng)用作這些成員上.u32 subvendor;u32 subdevice;這些指定一個(gè)設(shè)備的 PCI 子系統(tǒng)供應(yīng)商和子系統(tǒng)設(shè)備 ID. 如果驅(qū)動(dòng)可 處理任何類(lèi)型的子系統(tǒng) ID, 值 PCI_ANY_I
28、D 應(yīng)當(dāng)用作這些成員上 ._u32 class;_u32 class_mask;這 2 個(gè)值允許驅(qū)動(dòng)來(lái)指定它支持一類(lèi) PCI 類(lèi)設(shè)備 . 不同的 PCI 設(shè)備類(lèi) ( 一個(gè) VAG 控制器是一個(gè)例子 ) 在 PCI 規(guī)范里被描述 . 如果一個(gè)驅(qū)動(dòng) 可處理任何子系統(tǒng) ID, 值 PCI_ANY_ID 應(yīng)當(dāng)用作這些字段 .kernel_ulong_t driver_data;這個(gè)值不用來(lái)匹配一個(gè)設(shè)備 , 但是用來(lái)持有信息 , PCI 驅(qū)動(dòng)可用來(lái)區(qū)分 不同的設(shè)備 , 如果它想這樣 .有 2 個(gè)幫助宏定義應(yīng)當(dāng)被用來(lái)初始化一個(gè) struct pci_device_id 結(jié)構(gòu) :PCI_DEVICE(ven
29、dor, device)這個(gè)創(chuàng)建一個(gè) struct pci_device_id ,它只匹配特定的供應(yīng)商和設(shè)備ID. 這個(gè)宏設(shè)置這個(gè)結(jié)構(gòu)的子供應(yīng)商和子設(shè)備成員為 PCI_ANY_ID.PCI_DEVICE_CLASS(device_class, device_class_mask)這個(gè)創(chuàng)建一個(gè) struct pci_device_id, 它匹配一個(gè)特定的 PCI 類(lèi).一個(gè)使用這些宏來(lái)定義一個(gè)驅(qū)動(dòng)支持的設(shè)備類(lèi)型的例子 , 在下面的內(nèi)核 文件中可找到 :drivers/usb/host/ehci-hcd.c:static const struct pci_device_id pci_ids = /*
30、 handle any USB 2.0 EHCI controller */PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB << 8) | 0x20), 0), .driver_data = (unsigned long) &ehci_driver, /* end: all zeroes */ ;drivers/i2c/busses/i2c-i810.c: static struct pci_device_id i810_ids = PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810
31、_IG1) , PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3) , PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810E_IG) , PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_CGC) , PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845G_IG) , 0, , ;這些例子創(chuàng)建一個(gè) struct pci_device
32、_id 結(jié)構(gòu)的列表 , 列表中最后一 個(gè)是被設(shè)置為全零的的空結(jié)構(gòu) . 這個(gè) ID 的數(shù)組用在 struct pci_driver ( 下面講述 ), 并且它還用來(lái)告訴用戶(hù)空間這個(gè)特定的驅(qū)動(dòng)支 持哪個(gè)設(shè)備 .這個(gè) pci_device_id 結(jié)構(gòu)需要被輸出到用戶(hù)空間 , 來(lái)允許熱插拔和模塊 加載系統(tǒng)知道什么模塊使用什么硬件設(shè)備宏MODULE_DEVICE_TAB完E 成這個(gè).例如:MODULE_DEVICE_TABLE(pci, i810_ids);這個(gè)語(yǔ)句創(chuàng)建一個(gè)局部變量稱(chēng)為 _mod_pci_device_table,它指向struct pci_device_id 的列表. 稍后在內(nèi)核建立過(guò)
33、程中 , depmod 程序在 所有的模塊中尋找 _mod_pci_device_table.如果找到這個(gè)符號(hào) , 它將數(shù)據(jù)拉出模塊并且添加到文件 /lib/modules/KERNEL_VERSION/modules.pcimap. 在 depmod 完成后 , 所有的被內(nèi)核中的模塊支持的 PCI 設(shè)備被列出 , 帶有它們的模塊名子 , 在那個(gè)文件中 . 當(dāng)內(nèi)核告知熱插拔系統(tǒng)有新的 PCI 設(shè)備已找到 , 熱插拔 系統(tǒng)使用 moudles.pcimap 文件來(lái)找到正確的驅(qū)動(dòng)來(lái)加載 .注冊(cè)一個(gè) PCI 驅(qū)動(dòng)為了被正確注冊(cè)到內(nèi)核 , 所有的 PCI 驅(qū)動(dòng)必須創(chuàng)建的主結(jié)構(gòu)是 struct pci_
34、driver 結(jié)構(gòu) . 這個(gè)結(jié)構(gòu)包含許多函數(shù)回調(diào)和變量 , 來(lái)描述 PCI 驅(qū) 動(dòng)給 PCI 核心 . 這里是這個(gè)結(jié)構(gòu)的一個(gè) PCI 驅(qū)動(dòng)需要知道的成員 :const char *name;驅(qū)動(dòng)的名子 . 它必須是唯一的 , 在內(nèi)核中所有 PCI 驅(qū)動(dòng)里面 . 通常被設(shè) 置為和驅(qū)動(dòng)模塊名子相同的名子 . 它顯示在 sysfs 中在 /sys/bus/pci/drivers/下, 當(dāng)驅(qū)動(dòng)在內(nèi)核時(shí) .const struct pci_device_id *id_table;指向 struct pci_device_id 表的指針 , 在本章后面描述它 .int (*probe) (struct p
35、ci_dev *dev, const struct pci_device_id *id);指向 PCI 驅(qū)動(dòng)中 probe 函數(shù)的指針 . 這個(gè)函數(shù)被 PCI 核心調(diào)用 , 當(dāng)它 有一個(gè)它認(rèn)為這個(gè)驅(qū)動(dòng)想控制的 struct pci_dev 時(shí). 一個(gè)指向 struct pci_device_id 的指針 , PCI 核心用來(lái)做這個(gè)決定的 , 也被傳遞給這個(gè) 函數(shù). 如果這個(gè) PCI 驅(qū)動(dòng)需要這個(gè)傳遞給它的 struct pci_dev, 它應(yīng) 當(dāng)正確初始化這個(gè)設(shè)備并且返回 0. 如果這個(gè)驅(qū)動(dòng)不想擁有這個(gè)設(shè)備 , 或者產(chǎn)生一個(gè)錯(cuò)誤 , 它應(yīng)當(dāng)返回一個(gè)負(fù)的錯(cuò)誤值 . 關(guān)于這個(gè)函數(shù)的更多 的細(xì)節(jié)在本
36、章后面 .void (*remove) (struct pci_dev *dev);指向 PCI 核心在 struct pci_dev被從系統(tǒng)中去除時(shí)調(diào)用的函數(shù)的指針或者當(dāng) PCI 驅(qū)動(dòng)被從內(nèi)核中卸載時(shí) . 關(guān)于這個(gè)函數(shù)的更多的細(xì)節(jié)在本章 后面.int (*suspend) (struct pci_dev *dev, u32 state);當(dāng) struct pci_dev 被掛起時(shí) PCI 核心調(diào)用的函數(shù)的指針 . 掛起狀態(tài)在 state 變量里傳遞 . 這個(gè)函數(shù)是可選的 ; 一個(gè)驅(qū)動(dòng)不必提供它 .int (*resume) (struct pci_dev *dev);當(dāng) pci_dev 被恢
37、復(fù)時(shí) PCI 核心調(diào)用的函數(shù)的指針 . 它一直被調(diào)用在調(diào) 用掛起之后 . 這個(gè)函數(shù)時(shí)可選的 ; 一個(gè)驅(qū)動(dòng)不必提供它 .總之, 為創(chuàng)建一個(gè)正確的 struct pci_driver 結(jié)構(gòu), 只有 4 個(gè)字段需 要被初始化 :例如:static struct pci_device_id wctdm_pci_tbl = 0xe159, 0x0001, 0xb100, PCI_ANY_ID, 0, 0, (unsigned long)&wctdmi , 0 ;MODULE_DEVICE_TABLE(pci, wctdm_pci_tbl);static struct pci_driver wct
38、dm_driver = .name = "ax4g",.probe = wctdm_init_one,.remove =_devexit_p(wctdm_remove_one),.suspend = NULL,.resume = NULL,.id_table = wctdm_pci_tbl,;注冊(cè)驅(qū)動(dòng)程序, 注意 , pci_register_driver函數(shù)要么返回一個(gè)負(fù)的錯(cuò)誤碼, 要么是 0 當(dāng)所有都成功注冊(cè) . 它不返回綁定到驅(qū)動(dòng)上的設(shè)備號(hào) , 或 者一個(gè)錯(cuò)誤碼如果沒(méi)有設(shè)備被綁定到驅(qū)動(dòng)上。static int _ _init wctdm_init(void) int
39、res;res = pci_register_driver(&wctdm_driver); if (res)return -ENODEV;return 0;注銷(xiāo)驅(qū)動(dòng)程序,當(dāng) PCI 驅(qū)動(dòng)被卸載 , struct pci_drive 需要從內(nèi)核中注 銷(xiāo). 這通過(guò)調(diào)用 pci_unregister_driver完成 . 當(dāng)發(fā)生這個(gè)調(diào)用 , 任何當(dāng)前綁定到這個(gè)驅(qū)動(dòng)的 PCI 設(shè)備都被去除 , 并且這個(gè) PCI 驅(qū)動(dòng)的 remove 函數(shù)在 pci_unregister_driver 函數(shù)返回之前被調(diào)用 .static void _exit wctdm_cleanup(void) pci_un
40、register_driver(&wctdm_driver); 在 PCI 驅(qū)動(dòng)的探測(cè)函數(shù)中 , 驅(qū)動(dòng)可存取 PCI 設(shè)備的任何設(shè)備資源 (I/O 區(qū)或者 中斷) 前, 驅(qū)動(dòng)必須調(diào)用 pci_enable_device 函數(shù):int pci_enable_device(struct pci_dev *dev);這個(gè)函數(shù)實(shí)際上使能設(shè)備 . 它喚醒設(shè)備以及在某些情況下也分配它的中 斷線和 I/O 區(qū) .在驅(qū)動(dòng)已探測(cè)到設(shè)備后 , 它常常需要讀或?qū)?3 個(gè)地址空間 : 內(nèi)存 , 端口, 和配置 . 特別地, 存取配置空間對(duì)驅(qū)動(dòng)是至關(guān)重要的 , 因?yàn)檫@是唯一的 找到設(shè)備被映射到內(nèi)存和 I/O 空
41、間的位置的方法 .因?yàn)槲⑻幚砥鳠o(wú)法直接存取配置空間 , 計(jì)算機(jī)供應(yīng)商不得不提供一個(gè)方 法來(lái)完成它 . 為存取配置空間 , CPU 必須寫(xiě)和讀 PCI 控制器中的寄存器 , 但是確切的實(shí)現(xiàn)是依賴(lài)于供應(yīng)商的 , 并且和這個(gè)討論無(wú)關(guān) , 因?yàn)?Linux 提供了一個(gè)標(biāo)準(zhǔn)接口來(lái)存取配置空間 .對(duì)于驅(qū)動(dòng), 配置空間可通過(guò) 8-位, 16- 位, 或者 32- 位數(shù)據(jù)傳輸來(lái)存取 . 相關(guān)的函數(shù)原型定義于 <linux/pci.h>:int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val); int pci_read_co
42、nfig_word(struct pci_dev *dev, int where, u16 *val);int pci_read_config_dword(struct pci_dev *dev, int where, u32*val);從由 dev 所標(biāo)識(shí)出的設(shè)備的配置空間讀 1 個(gè), 2 個(gè)或者 4 個(gè)字節(jié). where 參數(shù)是從配置空間開(kāi)始的字節(jié)偏移 . 從配置空間取得的值通過(guò) val 指針?lè)祷?, 并且這個(gè)函數(shù)的返回值是一個(gè)錯(cuò)誤碼 . word 和 dword 函數(shù)轉(zhuǎn)換剛剛讀的值從小端到處理器的本地字節(jié)序 , 因此你不必處理字 節(jié)序.int pci_write_config_byte(
43、struct pci_dev *dev, int where, u8 val); int pci_write_config_word(struct pci_dev *dev, int where, u16 val);int pci_write_config_dword(struct pci_dev *dev, int where, u32val);寫(xiě) 1 個(gè) , 2 個(gè)或者 4 個(gè)字節(jié)到配置空間 . 象通常一樣 , 設(shè)備由 dev 所 標(biāo)識(shí), 并且象通常一樣被寫(xiě)的值被傳遞 . word 和 dword 函數(shù)轉(zhuǎn)換這個(gè) 值到小端 , 在寫(xiě)到外設(shè)之前 .所有的之前的函數(shù)被實(shí)現(xiàn)為真正調(diào)用下列函數(shù)的內(nèi)聯(lián)
44、函數(shù) . 可自由使用 這些函數(shù)代替上面這些 , 如果這個(gè)驅(qū)動(dòng)在任何特別時(shí)刻不能及時(shí)存取 struct pci_dev :int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val);int pci_bus_read_config_word (struct pci_bus *bus, unsigned intdevfn, int where, u16 *val);int pci_bus_read_config_dword (struct pci_bus *bus, unsign
45、ed intdevfn, int where, u32 *val);就象 pci_read_function 一樣 , 但是 struct pci_bus * 和 devfn 變量 需要來(lái)代替 struct pci_dev *.int pci_bus_write_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 val);int pci_bus_write_c on fig_word (struct pci_bus *bus, un sig ned int devfn, int where, u16 val);int pci_bus_write_config_dword(struct pci_bus *bus, unsigned intdevfn, int where, u32 val);如同pci_write_ 函數(shù),但是struct pci_bus * 和devfn 變量需要來(lái) 替代 struct pci_dev *使用pci_read_函數(shù)尋址配置變量的最好方法是通過(guò)定義在<linux/pci.h>中的符號(hào)名.例如,下面的小函數(shù)獲取一個(gè)設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6 我們神圣的國(guó)土 第三課時(shí) (說(shuō)課稿)-部編版道德與法治五年級(jí)上冊(cè)
- 7-1《短歌行》說(shuō)課稿 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 2025年企業(yè)招標(biāo)承包經(jīng)營(yíng)合同
- 《7 剪紙藝術(shù)》(說(shuō)課稿)-2023-2024學(xué)年四年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)粵教版
- Module 8 Unit 1 Were going to visit Hainan.(說(shuō)課稿)-2024-2025學(xué)年外研版(三起)英語(yǔ)四年級(jí)上冊(cè)
- Unit 2 My week Period 4 Get ready for the new school year(說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)五年級(jí)上冊(cè)
- 19海濱小城 (說(shuō)課稿)-2024-2025學(xué)年三年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 2025農(nóng)副產(chǎn)品買(mǎi)賣(mài)合同書(shū)模板(合同版本)
- 2023八年級(jí)語(yǔ)文上冊(cè) 第五單元 口語(yǔ)交際 復(fù)述與轉(zhuǎn)述配套說(shuō)課稿 新人教版
- 2024年春八年級(jí)歷史下冊(cè) 第10課 社會(huì)主義民主與法制的加強(qiáng)說(shuō)課稿1(pdf) 川教版
- 2024年快遞行業(yè)無(wú)人機(jī)物流運(yùn)輸合同范本及法規(guī)遵循3篇
- 地下商業(yè)街的規(guī)劃設(shè)計(jì)
- 傷殘撫恤管理辦法實(shí)施細(xì)則
- 提升模組良率-六西格瑪
- DL-T+5196-2016火力發(fā)電廠石灰石-石膏濕法煙氣脫硫系統(tǒng)設(shè)計(jì)規(guī)程
- 2024-2030年中國(guó)產(chǎn)教融合行業(yè)市場(chǎng)運(yùn)營(yíng)態(tài)勢(shì)及發(fā)展前景研判報(bào)告
- 2024年微生物檢測(cè)試劑行業(yè)商業(yè)計(jì)劃書(shū)
- 通信設(shè)備售后服務(wù)方案
- 高中英語(yǔ)選擇性必修一單詞表
- 初中生物校本課程綱要
- 物業(yè)公司介紹
評(píng)論
0/150
提交評(píng)論