色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > USB無線網(wǎng)絡(luò)適配器在系統(tǒng)中的應(yīng)用

          USB無線網(wǎng)絡(luò)適配器在系統(tǒng)中的應(yīng)用

          作者: 時(shí)間:2013-10-08 來源:網(wǎng)絡(luò) 收藏


            圖2-2 SL811HS 主/從控制器功能框圖

            l 主/控制器模塊、RAM緩存及控制寄存器模塊、串行接口引擎(SIE)是系統(tǒng)的核心模塊。

            l SIE模塊負(fù)責(zé)總線與主機(jī)之間數(shù)據(jù)的串、并轉(zhuǎn)換,完成總線的電氣功能。

            l BUFFER用于數(shù)據(jù)緩存。SL811HC只有一根地址線A0。A0=1用于設(shè)定偏移量, A0=0用于讀寫數(shù)據(jù)。讀寫數(shù)據(jù)應(yīng)該首先指定偏移量,然后實(shí)現(xiàn)讀取時(shí)序。該芯片也支持地址自增量讀取,如果連續(xù)讀或?qū)憯?shù)據(jù)端口,則緩存區(qū)的偏移量地址會(huì)自動(dòng)加1。這樣的設(shè)計(jì)支持了數(shù)據(jù)的快速讀寫。下面的代碼給出了兩種方式下的數(shù)據(jù)讀取例程:

            static __u8 SL811Read (hci_t * hci, __u8 offset)

           ?。?/P>

            WRITE_INDEX (offset);

            return (READ_DATA ());

            }

            static void SL811BufRead (hci_t * hci, __u8 offset, __u8 *buf, __u8 size)

           ?。?/P>

            WRITE_INDEX (offset);

            while (size——) {

            *buf++ = READ_DATA();

           ?。?/P>

            }

            l 控制模塊和控制寄存器用來控制芯片正確工作,總線狀態(tài)也保存在寄存器中。

            l 中斷控制器和接口邏輯實(shí)現(xiàn)與MCU的接口。

            2.3 USB HCD的實(shí)現(xiàn)

            如前所述,USB HCD是USB系統(tǒng)控制主機(jī)控制器的工具,它的實(shí)現(xiàn)依賴于具體的硬件。因此,除了硬件系統(tǒng)的搭建以外,USB主控制器的實(shí)現(xiàn)大部分是HCD的實(shí)現(xiàn)。篇幅所限,這里僅給出主要的數(shù)據(jù)結(jié)構(gòu)和函數(shù)調(diào)用。

            usb_bus結(jié)構(gòu)描述了usb核心層里的USB總線結(jié)構(gòu),下面列出了usb_bus結(jié)構(gòu)里的主要成員。

            struct usb_bus {

            int busnum; /* USB總線號(hào)*/

            char *bus_name; /* USB總線名稱 */

            struct usb_devmap devmap; /* 設(shè)備 */

            struct usb_operations *op; /* 對(duì)應(yīng)于特定HCI的操作 */

            struct usb_device *root_hub; /*根hub */

            void *hcpriv; /* Host Controller private data */

            ……

            };

            op指向一個(gè)usb_operations型數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)用來給USB核心層指定hci操作的函數(shù)指針:

            static struct usb_operations hci_device_operations = {

            allocate: hci_alloc_dev,

            deallocate: hci_free_dev,

            get_frame_number: hci_get_current_frame_number,

            submit_urb: hci_submit_urb,

            unlink_urb: hci_unlink_urb,

           ?。?

            void *hcpriv是一個(gè)無類型指針,指向一個(gè)HCI數(shù)據(jù)結(jié)構(gòu),可以是UHCI,OHCI,或其他HCI。在這里,它指向SL811HC的hci_t數(shù)據(jù)結(jié)構(gòu)。下面給出了SL811HC的hci_t數(shù)據(jù)結(jié)構(gòu)的主要成員。

            typedef struct hci {

            struct virt_root_hub rh; /* 主機(jī)控制器的虛擬根hub的私有成員 */

            struct list_head ctrl_list; /* 控制端點(diǎn)的列表 */

            struct list_head bulk_list; /* 批量傳輸端點(diǎn)的列表*/

            struct list_head iso_list; /* 同步傳輸端點(diǎn)的列表*/

            struct list_head intr_list; /* 中斷傳輸端點(diǎn)的列表*/

            td_array_t *td_array; /* 事務(wù)描述符隊(duì)列 */

            td_array_t a_td_array;

            td_array_t i_td_array[2];

            struct usb_bus *bus; /* 指向usb_bus的指針 */

            ……

            } hci_t;

            在hci_t數(shù)據(jù)結(jié)構(gòu)中,有一個(gè)指向usb_bus的指針??梢姡琱ci_t數(shù)據(jù)結(jié)構(gòu)和usb_bus數(shù)據(jù)結(jié)構(gòu)互相有一個(gè)指針指向?qū)Ψ?,它們一起完整的描述了USB的總線行為。

          高效液相色譜儀相關(guān)文章:高效液相色譜儀原理


          評(píng)論


          相關(guān)推薦

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

          關(guān)閉