1、描述
網(wǎng)卡的驅(qū)動其實很簡單,它還是與硬件相關(guān),主要是負(fù)責(zé)收發(fā)網(wǎng)絡(luò)的數(shù)據(jù)包,它將上層協(xié)議傳遞下來的數(shù)據(jù)包以特定的媒介訪問控制方式進(jìn)行發(fā)送,并將接受到的數(shù)據(jù)包傳遞給上層協(xié)議。
網(wǎng)卡設(shè)備與字符設(shè)備和塊設(shè)備不同,網(wǎng)絡(luò)設(shè)備并不對應(yīng)于/dev/目錄下的文件,不過會存放在/sys/class/net目錄下
2、Linux系統(tǒng)對網(wǎng)絡(luò)設(shè)備驅(qū)動定義了4個層次,這4個層次有到下分為:
1)網(wǎng)絡(luò)協(xié)議接口層:
實現(xiàn)統(tǒng)一的數(shù)據(jù)包收發(fā)的協(xié)議,該層主要負(fù)責(zé)調(diào)用dev_queue_xmit()函數(shù)發(fā)送數(shù)據(jù),netif_rx()函數(shù)接收數(shù)據(jù)
2)網(wǎng)絡(luò)設(shè)備接口層:
通過net_device結(jié)構(gòu)體來描述一個具體的網(wǎng)絡(luò)設(shè)備的信息,實現(xiàn)不同的硬件的統(tǒng)一
3)設(shè)備驅(qū)動功能層:
用來負(fù)責(zé)驅(qū)動網(wǎng)路設(shè)備硬件來完成各個功能,它通過hard_start_xmit()函數(shù)啟動發(fā)送操作,并通過網(wǎng)絡(luò)設(shè)備上的中斷觸發(fā)接收操作
4)網(wǎng)絡(luò)設(shè)備與媒體層:
用來負(fù)責(zé)完成數(shù)據(jù)包發(fā)送和接受的物理實體,設(shè)備驅(qū)動功能層的函數(shù)都在這物理上驅(qū)動的
層次結(jié)構(gòu)如下圖所示:
3、網(wǎng)卡驅(qū)動初始化
而我們的網(wǎng)卡驅(qū)動程序,只需要編寫網(wǎng)絡(luò)設(shè)備接口層,填充net_device數(shù)據(jù)結(jié)構(gòu)的內(nèi)容并將net_device注冊入內(nèi)核,設(shè)置硬件相關(guān)操作,使能中斷處理等。
3.1 其中net_device結(jié)構(gòu)體的重要成員,整理后如下所示:
struct net_device
{
char name[IFNAMSIZ]; //網(wǎng)卡設(shè)備名稱
unsigned long mem_end; //該設(shè)備的內(nèi)存結(jié)束地址
unsigned long mem_start; //該設(shè)備的內(nèi)存起始地址
unsigned long base_addr; //該設(shè)備的內(nèi)存I/O基地址
unsigned int irq; //該設(shè)備的中斷號
unsigned char if_port; //多端口設(shè)備使用的端口類型
unsigned char dma; //該設(shè)備的DMA通道
unsigned long state; //網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)適配器的狀態(tài)信息
struct net_device_stats* (*get_stats)(struct net_device *dev); //獲取流量的統(tǒng)計信息
//運(yùn)行ifconfig便會調(diào)用該成員函數(shù),并返回一個net_device_stats結(jié)構(gòu)體獲取信息
struct net_device_stats stats; //用來保存統(tǒng)計信息的net_device_stats結(jié)構(gòu)體
unsigned long features; //接口特征,
unsigned int flags; //flags指網(wǎng)絡(luò)接口標(biāo)志,以IFF_(Interface Flags)開頭
//當(dāng)flags =IFF_UP( 當(dāng)設(shè)備被激活并可以開始發(fā)送數(shù)據(jù)包時, 內(nèi)核設(shè)置該標(biāo)志)、 IFF_AUTOMEDIA(設(shè)置設(shè)備可在多種媒介間切換)、
IFF_BROADCAST( 允許廣播)、IFF_DEBUG( 調(diào)試模式, 可用于控制printk調(diào)用的詳細(xì)程度) 、 IFF_LOOPBACK( 回環(huán))、
IFF_MULTICAST( 允許組播) 、 IFF_NOARP( 接口不能執(zhí)行ARP,點對點接口就不需要運(yùn)行 ARP) 和IFF_POINTOPOINT( 接口連接到點到點鏈路) 等。
unsigned mtu; //最大傳輸單元,也叫最大數(shù)據(jù)包
unsigned short type; //接口的硬件類型
unsigned short hard_header_len; //硬件幀頭長度,一般被賦為ETH_HLEN,即14
unsigned char dev_addr[MAX_ADDR_LEN]; //存放設(shè)備的MAC地址
unsigned long last_rx; //接收數(shù)據(jù)包的時間戳,調(diào)用netif_rx()后賦上jiffies即可
unsigned long trans_start; //發(fā)送數(shù)據(jù)包的時間戳,當(dāng)要發(fā)送的時候賦上jiffies即可
unsigned char dev_addr[MAX_ADDR_LEN]; //MAC地址
int (*hard_start_xmit) (struct sk_buff *skb, struct net_device *dev);
//數(shù)據(jù)包發(fā)送函數(shù), sk_buff就是用來收發(fā)數(shù)據(jù)包的結(jié)構(gòu)體
void (*tx_timeout) (struct net_device *dev); //發(fā)包超時處理函數(shù)
... ...
}
上面提到的統(tǒng)計信息net_device_stats結(jié)構(gòu)體,其中重要成員如下所示:
struct net_device_stats
{
unsigned long rx_packets; /*收到的數(shù)據(jù)包數(shù)*/
unsigned long tx_packets; /*發(fā)送的數(shù)據(jù)包數(shù) */
unsigned long rx_bytes; /*收到的字節(jié)數(shù),可以通過sk_buff結(jié)構(gòu)體的成員len來獲取*/
unsigned long tx_bytes; /*發(fā)送的字節(jié)數(shù),可以通過sk_buff結(jié)構(gòu)體的成員len來獲取*/
unsigned long rx_errors; /*收到的錯誤數(shù)據(jù)包數(shù)*/
unsigned long tx_errors; /*發(fā)送的錯誤數(shù)據(jù)包數(shù)*/
... ...
}
3.2 所以init()函數(shù),初始化網(wǎng)卡步驟如下所示:
1) 使用alloc_netdev()來分配一個net_device結(jié)構(gòu)體
2) 設(shè)置網(wǎng)卡硬件相關(guān)的寄存器
3) 設(shè)置net_device結(jié)構(gòu)體的成員
4) 使用register_netdev()來注冊net_device結(jié)構(gòu)體
4、網(wǎng)卡驅(qū)動發(fā)包過程
在內(nèi)核中,當(dāng)上層要發(fā)送一個數(shù)據(jù)包時,就會調(diào)用網(wǎng)絡(luò)設(shè)備層里net_device數(shù)據(jù)結(jié)構(gòu)的成員hard_start_xmit()將數(shù)據(jù)包發(fā)送出去。
hard_start_xmit()發(fā)包函數(shù)需要我們自己構(gòu)建,該函數(shù)原型如下所示:
int (*hard_start_xmit) (struct sk_buff *skb, struct net_device *dev);
在這個函數(shù)中,需要涉及到sk_buff結(jié)構(gòu)體,含義為(socket buffer)套接字緩沖區(qū),用來網(wǎng)絡(luò)各個層次之間傳遞數(shù)據(jù)。
4.1 sk_buff結(jié)構(gòu)體是一個雙向鏈表,其中重要成員如下所示:
struct sk_buff {
/* These two members must be first. */
struct sk_buff *next; //指向下一個sk_buff結(jié)構(gòu)體
struct sk_buff *prev; //指向前一個sk_buff結(jié)構(gòu)體
... ...
unsigned int len, //數(shù)據(jù)包的總長度,包括線性數(shù)據(jù)和非線性數(shù)據(jù)
data_len, //非線性的數(shù)據(jù)長度
mac_len; //mac包頭長度
__u32 priority; //該sk_buff結(jié)構(gòu)體的優(yōu)先級
__be16 protocol; //存放上層的協(xié)議類型,可以通過eth_type_trans()來獲取
... ...
sk_buff_data_t transport_header; //傳輸層頭部的偏移值
sk_buff_data_t network_header; //網(wǎng)絡(luò)層頭部的偏移值
sk_buff_data_t mac_header; //MAC數(shù)據(jù)鏈路層頭部的偏移值
sk_buff_data_t tail; //指向緩沖區(qū)的數(shù)據(jù)包末尾
sk_buff_data_t end; //指向緩沖區(qū)的末尾
unsigned char *head, //指向緩沖區(qū)的協(xié)議頭開始位置
*data; //指向緩沖區(qū)的數(shù)據(jù)包開始位置
... ...
}
其中sk_buff結(jié)構(gòu)體的空間,如下圖所示:
其中sk_buff->data數(shù)據(jù)包格式如下圖所示:
4.2 所以,hard_start_xmit()發(fā)包函數(shù)處理步驟如下所示:
1)數(shù)據(jù)包發(fā)送出去之前,需要使用netif_stop_queue()來停止上層傳下來的數(shù)據(jù)包
2)設(shè)置寄存器,通過網(wǎng)絡(luò)設(shè)備硬件,來發(fā)送數(shù)據(jù)
3)當(dāng)數(shù)據(jù)包發(fā)出去后,再調(diào)用dev_free_skb()函數(shù)來釋放sk_buff,該函數(shù)原型如下:
void dev_kfree_skb(struct sk_buff *skb);
4)當(dāng)數(shù)據(jù)包發(fā)出成功,就會進(jìn)入TX中斷函數(shù),然后更新統(tǒng)計信息,調(diào)用netif_wake_queue來喚醒,啟動上層繼續(xù)發(fā)數(shù)據(jù)包下來
5)若數(shù)據(jù)包發(fā)出去超時,一直進(jìn)不到TX中斷函數(shù),就會調(diào)用net_device結(jié)構(gòu)體的(*tx_timeout)超時成員函數(shù),在該函數(shù)中更新
統(tǒng)計信息,調(diào)用netif_wake_queue()來喚醒
其中netif_wake_queue()和netif_stop_queue()函數(shù)原型如下所示:
void netif_wake_queue(struct net_device *dev); //喚醒被阻塞的上層,啟動繼續(xù)向網(wǎng)絡(luò)設(shè)備驅(qū)動層發(fā)送數(shù)據(jù)包
void netif_stop_queue(struct net_device *dev); //阻止上層向網(wǎng)絡(luò)設(shè)備驅(qū)動層發(fā)送數(shù)據(jù)包
5、網(wǎng)卡驅(qū)動收包過程
而接收數(shù)據(jù)包主要是通過中斷函數(shù)處理,來判斷中斷類型,如果等于ISQ_RECEIVER_EVENT,表示為接受中斷,然后進(jìn)入接收數(shù)據(jù)函數(shù),通過netif_rx()將數(shù)據(jù)上交給上層
例如下圖所示,參考的內(nèi)核中自帶的網(wǎng)卡驅(qū)動:drivers/net/cs89x0.c
如上圖所示,通過獲取的status標(biāo)志來判斷是什么中斷,如果是接受中斷,就進(jìn)入net_rx()
5.1 其中net_rx()收包函數(shù)處理步驟如下所示:
1)使用dev_alloc_skb()來構(gòu)造一個新的sk_buff
2)使用skb_reserve(rx_skb,2);將sk_buff緩沖區(qū)里的數(shù)據(jù)包先后位移2字節(jié),來騰出sk_buff緩沖區(qū)里的頭部空間
3)讀取網(wǎng)絡(luò)設(shè)備硬件上接收到的數(shù)據(jù)
4)使用memcpy()將數(shù)據(jù)復(fù)制到新的sk_buff里的data成員指向的地址處,可以使用skb_put()來動態(tài)擴(kuò)大sk_buff結(jié)構(gòu)體里中的數(shù)據(jù)區(qū)
5)使用eth_type_trans()來獲取上層協(xié)議,將返回值賦給sk_buff的protocol成員里
6)然后更新統(tǒng)計信息,最后使用netif_rx()來將sk_buffer傳遞給上層協(xié)議中
其中skb_put()函數(shù)原型如下所示:
static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len);
//len:將數(shù)據(jù)區(qū)向下擴(kuò)大len字節(jié)
使用skb_put()函數(shù)后,其中sk_buff緩沖區(qū)變化如下圖:
6、寫虛擬網(wǎng)卡驅(qū)動
本屆便開始來寫一個簡單的虛擬網(wǎng)卡驅(qū)動,也就是說不需要硬件相關(guān)操作,所以就沒有中斷函數(shù),我們通過linux的ping命令來實現(xiàn)發(fā)包,然后在發(fā)包函數(shù)中,偽造一個收的ping包函數(shù),實現(xiàn)ping通任何ip地址
在init初始函數(shù)中:
1)使用alloc_netdev()來分配一個net_device結(jié)構(gòu)體
2)設(shè)置net_device結(jié)構(gòu)體的成員
3)使用register_netdev()來注冊net_device結(jié)構(gòu)體
在發(fā)包函數(shù)中:
1)使用netif_stop_queue()來阻止上層向網(wǎng)絡(luò)設(shè)備驅(qū)動層發(fā)送數(shù)據(jù)包
2)調(diào)用收包函數(shù),并代入發(fā)送的sk_buff緩沖區(qū),里面來偽造一個收的ping包函數(shù)
3)使用dev_kfree_skb()函數(shù)來釋放發(fā)送的sk_buff緩存區(qū)
4)更新發(fā)送的統(tǒng)計信息
5)使用netif_wake_queue()來喚醒被阻塞的上層
在收包函數(shù)中:
首先修改發(fā)送的sk_buff里數(shù)據(jù)包的數(shù)據(jù),使它變?yōu)橐粋€接受的sk_buff,其中數(shù)據(jù)包結(jié)構(gòu)如下圖所示:
1)需要對調(diào)上的ethhdr結(jié)構(gòu)體“源/目的”MAC地址
2)需要對調(diào)上圖的iphdr結(jié)構(gòu)體"源/目的"IP地址
3)使用ip_fast_csum()來重新獲取iphdr結(jié)構(gòu)體的校驗碼
4)設(shè)置上圖數(shù)據(jù)包的數(shù)據(jù)類型,之前是發(fā)送ping包0x08,需要改為0x00,表示接受ping包
5)使用dev_alloc_skb()來構(gòu)造一個新的sk_buff
6)使用skb_reserve(rx_skb,2);將sk_buff緩沖區(qū)里的數(shù)據(jù)包先后位移2字節(jié),來騰出sk_buff緩沖區(qū)里的頭部空間
7)使用memcpy()將之前修改好的sk_buff->data復(fù)制到新的sk_buff里的data成員指向的地址處
memcpy(skb_put(rx_skb, skb->len), skb->data, skb->len);
// skb_put():來動態(tài)擴(kuò)大sk_buff結(jié)構(gòu)體里中的數(shù)據(jù)區(qū),避免溢出
8)設(shè)置新的sk_buff其它成員
9)使用eth_type_trans()來獲取上層協(xié)議,將返回值賦給sk_buff的protocol成員里
10)然后更新接收統(tǒng)計信息,最后使用netif_rx()來將sk_fuffer傳遞給上層協(xié)議中
7、驅(qū)動具體代碼如下:
/* 參考
* driversnetcs89x0.c
*/
#include #include #include #include #include #include
上一篇:S3C2440 Nor Flash驅(qū)動(二十四)
下一篇:S3C2440 熱拔插驅(qū)動 修改mdev配置支持U盤自動掛載(三十三)
推薦閱讀
史海拾趣
對于27MHz晶體振蕩器電路,網(wǎng)友可能會提出多種問題,以下是一些常見問題及其詳細(xì)回答:
一、電路設(shè)計相關(guān)問題
- 如何設(shè)計一個簡單的27MHz晶體振蕩器電路?
- 回答:設(shè)計一個簡單的27MHz晶體振蕩器電路通常包括晶體本身、兩個反饋電容、一個或多個電阻以及可能的放大元件(如晶體管或集成電路中的振蕩器部分)。例如,可以使用一個并聯(lián)型晶體振蕩器電路,其中晶體與兩個電容形成諧振電路,并通過一個放大元件(如CMOS反相器)提供正反饋以維持振蕩。具體設(shè)計可參考技術(shù)資料(如華強(qiáng)電子網(wǎng))提供的電路圖,并根據(jù)實際需要進(jìn)行調(diào)整。
- 如何選擇合適的反饋電容和電阻值?
- 回答:反饋電容和電阻的選擇對振蕩器的穩(wěn)定性和頻率精度至關(guān)重要。電容值通常根據(jù)晶體的規(guī)格和所需的振蕩頻率來確定,而電阻值則用于限制放大器的增益,以防止振蕩器過度放大并產(chǎn)生不穩(wěn)定現(xiàn)象。選擇時,建議參考晶體振蕩器的數(shù)據(jù)手冊或相關(guān)設(shè)計指南,并結(jié)合實驗測試來找到最佳值。
二、電路性能相關(guān)問題
- 如何減少27MHz晶體振蕩器的諧波失真?
- 回答:諧波失真通常是由于電路中的非線性元件或設(shè)計不當(dāng)引起的。為了減少諧波失真,可以采取以下措施:
- 選擇低諧波失真的晶體振蕩器。
- 在電路中添加低通濾波器以濾除高頻諧波。
- 優(yōu)化電路設(shè)計,減少非線性元件的使用,并確保電路元件的匹配性。
- 回答:諧波失真通常是由于電路中的非線性元件或設(shè)計不當(dāng)引起的。為了減少諧波失真,可以采取以下措施:
- 如何提高27MHz晶體振蕩器的頻率穩(wěn)定性?
- 回答:頻率穩(wěn)定性受多種因素影響,包括晶體的物理特性、環(huán)境溫度、電源電壓波動等。提高頻率穩(wěn)定性的方法包括:
- 選擇高質(zhì)量的晶體振蕩器,確保其具有較低的頻率漂移和溫度系數(shù)。
- 在電路中添加溫度補(bǔ)償電路,以抵消溫度變化對頻率的影響。
- 使用穩(wěn)定的電源電壓,并在必要時添加電壓穩(wěn)壓器。
- 優(yōu)化電路布局和接地設(shè)計,減少電磁干擾和噪聲。
- 回答:頻率穩(wěn)定性受多種因素影響,包括晶體的物理特性、環(huán)境溫度、電源電壓波動等。提高頻率穩(wěn)定性的方法包括:
三、電路調(diào)試與測試相關(guān)問題
- 如何調(diào)試27MHz晶體振蕩器電路以確保其正常工作?
- 回答:調(diào)試晶體振蕩器電路時,可以按照以下步驟進(jìn)行:
- 檢查電路連接是否正確,確保所有元件都已正確安裝。
- 使用示波器觀察振蕩波形,確認(rèn)其頻率和幅度是否符合要求。
- 調(diào)整反饋電容和電阻值,以優(yōu)化振蕩器的性能和穩(wěn)定性。
- 檢查電源電壓和電流是否穩(wěn)定,并調(diào)整至推薦值。
- 如果發(fā)現(xiàn)諧波失真或其他問題,根據(jù)具體情況采取相應(yīng)的解決措施。
- 回答:調(diào)試晶體振蕩器電路時,可以按照以下步驟進(jìn)行:
- 如何測試27MHz晶體振蕩器的輸出頻率和相位噪聲?
- 回答:測試晶體振蕩器的輸出頻率和相位噪聲通常需要使用專業(yè)的測試設(shè)備,如頻率計和相位噪聲分析儀。測試時,將振蕩器的輸出連接到測試設(shè)備的輸入端,并設(shè)置適當(dāng)?shù)臏y試參數(shù)。通過測試設(shè)備可以準(zhǔn)確測量振蕩器的輸出頻率和相位噪聲水平,從而評估其性能是否符合要求。
四、其他常見問題
- 27MHz晶體振蕩器適用于哪些應(yīng)用場景?
- 回答:27MHz晶體振蕩器由于其較高的頻率和較好的穩(wěn)定性,廣泛應(yīng)用于無線通信、雷達(dá)系統(tǒng)、電子測量儀器等領(lǐng)域。在這些應(yīng)用場景中,晶體振蕩器作為時鐘源或頻率基準(zhǔn),為系統(tǒng)提供穩(wěn)定的頻率信號。
- 如何延長27MHz晶體振蕩器的使用壽命?
- 回答:延長晶體振蕩器的使用壽命需要注意以下幾點:
- 避免在極端溫度或濕度條件下使用。
- 保持電源電壓穩(wěn)定,避免頻繁波動。
- 定期檢查電路連接和元件狀態(tài),及時更換損壞的元件。
- 避免機(jī)械沖擊和振動對晶體振蕩器的影響。
- 選擇質(zhì)量可靠、性能穩(wěn)定的晶體振蕩器產(chǎn)品。
- 回答:延長晶體振蕩器的使用壽命需要注意以下幾點:
Allegro Microsystems, Inc.是一家專注于開發(fā)、制造和銷售磁性、混合和傳感器集成電路的公司。以下是關(guān)于Allegro公司發(fā)展的五個相關(guān)故事:
創(chuàng)立與早期發(fā)展: Allegro公司成立于1967年,最初名為RMS Electronics。該公司最初專注于生產(chǎn)磁性元件和感應(yīng)器,以滿足汽車和工業(yè)市場的需求。隨著時間的推移,Allegro迅速發(fā)展,并在磁性傳感器技術(shù)領(lǐng)域取得了重要進(jìn)展。
成為行業(yè)領(lǐng)導(dǎo)者: 在20世紀(jì)90年代,Allegro開始將重點轉(zhuǎn)向混合集成電路的開發(fā),這進(jìn)一步加強(qiáng)了公司在汽車電子和工業(yè)自動化市場的地位。Allegro通過不斷創(chuàng)新和技術(shù)投資,逐漸成為全球領(lǐng)先的磁性傳感器和混合集成電路制造商之一。
技術(shù)創(chuàng)新與專利保護(hù): Allegro公司在磁性傳感器和混合集成電路領(lǐng)域積累了豐富的專利技術(shù)。該公司不斷進(jìn)行研發(fā)和技術(shù)創(chuàng)新,推出了許多行業(yè)領(lǐng)先的產(chǎn)品,如電流傳感器、霍爾效應(yīng)傳感器等。Allegro不僅積極保護(hù)自己的知識產(chǎn)權(quán),還與其他公司合作,共同推動技術(shù)的進(jìn)步。
全球化發(fā)展: 隨著全球汽車和工業(yè)市場的不斷發(fā)展,Allegro公司積極拓展國際業(yè)務(wù),并在全球范圍內(nèi)建立了廣泛的銷售網(wǎng)絡(luò)和生產(chǎn)基地。公司在美國、歐洲和亞洲設(shè)有多個研發(fā)中心和制造工廠,以滿足不同地區(qū)客戶的需求。
可持續(xù)發(fā)展與未來展望: Allegro公司致力于可持續(xù)發(fā)展和社會責(zé)任,采取了多項措施來減少對環(huán)境的影響,如提高能源效率、減少廢物排放等。未來,Allegro將繼續(xù)投入研發(fā)和創(chuàng)新,推出更多高性能、低功耗的產(chǎn)品,以滿足不斷增長的市場需求,并在全球范圍內(nèi)維持其領(lǐng)先地位。
隨著市場競爭的加劇和行業(yè)發(fā)展的需要,Aptina最終被半導(dǎo)體巨頭ON Semiconductor收購。這一收購使得Aptina得以借助ON Semiconductor的資源和平臺,實現(xiàn)更快速的發(fā)展。ON Semiconductor對Aptina的收購也進(jìn)一步提升了其在圖像傳感器領(lǐng)域的市場地位,為公司未來的發(fā)展注入了新的動力。
在電子行業(yè)的早期,Akahane Electronics Ind Corp憑借其先進(jìn)的半導(dǎo)體技術(shù)研發(fā),迅速嶄露頭角。公司專注于提高芯片的性能和穩(wěn)定性,不斷推出創(chuàng)新產(chǎn)品,滿足了市場對于高速運(yùn)算和高效能耗比的迫切需求。通過不斷優(yōu)化生產(chǎn)工藝和降低成本,Akahane在激烈的市場競爭中占據(jù)了一席之地,并逐漸擴(kuò)大了市場份額。
在HTC的發(fā)展歷程中,與微軟的合作無疑是重要的一環(huán)。早在2002年,微軟聯(lián)合HTC推出了全球第一臺搭載Windows mobile的Pocket PC,這一操作系統(tǒng)成為了日后WP 8的前身。得益于微軟的信任和支持,HTC能夠率先搭載最新的Windows mobile系統(tǒng),從而成為Windows手機(jī)的頂級生產(chǎn)商。這種緊密的合作關(guān)系不僅提升了HTC的品牌影響力,還為其帶來了大量的市場份額和利潤。
隨著公司產(chǎn)品的不斷升級和市場需求的不斷增長,東科半導(dǎo)體(DK)公司開始積極拓展國內(nèi)外市場。公司加強(qiáng)與全球知名企業(yè)的合作,產(chǎn)品成功進(jìn)入蘋果、華為、OPPO等一線品牌的供應(yīng)鏈。同時,東科還積極參加國際電子展會和論壇,展示公司的最新技術(shù)和產(chǎn)品,提升了公司的品牌知名度和影響力。
Wi-Fi 聯(lián)盟在華新增認(rèn)證測試實驗室 Wi-Fi 聯(lián)盟 (Wi-Fi Alliance) 宣布,上海同耀通信技術(shù)有限公司最近成為該公司最新的授權(quán)測試實驗室 (ATL),在中國主要的經(jīng)濟(jì)中心之一上海為其全球會員公司提供獨立測試服務(wù)。該實驗室于上月底完成了對其首個 Wi-Fi CERTIFIED 產(chǎn)品的測試。 同 ...… 查看全部問答∨ |
用Virtex-6和Spartan-6 FPGA構(gòu)建功耗優(yōu)化的設(shè)計 隨著元件選擇和功耗管理技術(shù)日益成為影響系統(tǒng)設(shè)計成功與否的重要考慮因素,工程師也越來越多地將其注意力集中到功耗上。 賽靈思采用了整體分析法來確保系統(tǒng)設(shè)計者能夠利用Virtex®-6和Spartan®-6 FPGA實現(xiàn)功耗優(yōu)化設(shè)計。 ...… 查看全部問答∨ |
視頻名詞解析(Video Demystified,950頁) Video Demystified,主要與視頻處理的一些格式,例如HDMI,DVI,YPBPR,AV等等一些的解析,對于初級的知識普及比較適用。 [ 本帖最后由 xuezhilianz 于 2009-8-21 09:06 編輯 ]… 查看全部問答∨ |
|
一,常規(guī)現(xiàn)有的封裝方法及應(yīng)用領(lǐng)域 目前LED 的封裝方法有:支架排封裝,貼片封裝,模組封裝幾種,這些封裝方法都是我們常見和常用的。 支架排封裝是最早采用,用來生產(chǎn)單個LED器件,這就是我們常見的引線型發(fā) ...… 查看全部問答∨ |
|
void FlashErase() { uchar *p0; FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//選擇時鐘源,分頻 FCTL3 = FWKEY;//清除LOCK while(FCTL3 & BUSY);//如果出于忙,則等待 FCTL1 = FWKEY + ERASE;//使能段操作 p0 = (unsigned char *)0x1080;//數(shù)值 ...… 查看全部問答∨ |
電子產(chǎn)品開發(fā)中常遇電磁兼容EMC問題及解決辦法 一般電子產(chǎn)品都最容易出的問題有:RE--輻射,CE--傳導(dǎo),ESD--靜電。通訊類電子產(chǎn)品不光包括以上三項:RE,CE,ESD,還有Surge--浪涌(雷擊,打雷) 醫(yī)療器械最容易出現(xiàn)的問題是:ESD--靜電,EFT--瞬態(tài)脈沖抗干擾,CS--傳導(dǎo)抗干擾,RS--輻射抗干擾 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- 線控技術(shù)是自動駕駛落地的必要條件嗎?
- 探索高鎳正極——未來電池技術(shù)的關(guān)鍵
- AEC-Q解讀:車規(guī)級芯片的“入場券”與技術(shù)門檻
- 出圈or出局?AI汽車“急速駛來”,市場淘汰賽一觸即發(fā)
- 車載以太網(wǎng)技術(shù)及其EAVB和TSN技術(shù)
- 自動駕駛中域控制器有何作用?
- 利用與硬件無關(guān)的方法簡化嵌入式系統(tǒng)設(shè)計:驅(qū)動程序?qū)崿F(xiàn)
- 英飛凌將CAPSENSE?集成至PSOC? HV微控制器, 賦能先進(jìn)觸控傳感應(yīng)用等智能傳感器和執(zhí)行器
- 如何部署流媒體服務(wù)實現(xiàn)監(jiān)控功能--基于米爾TI AM62x開發(fā)板
- Arm 洞察與思考:AI 技術(shù)破解創(chuàng)新與環(huán)境可持續(xù)發(fā)展難題
- 詳述項目申請,可獲 TI Stellaris開發(fā)板!
- 泰克 MSO6B 探索營:技術(shù)指標(biāo)大挑戰(zhàn),闖關(guān)贏好禮
- 駿龍科技攜手ADI有獎直播:隔離系統(tǒng)設(shè)計的隱藏成本
- 幫助他人,成就自己:EEWORLD月度問答榜(第4期)
- 【MPS有獎活動】分享【PCB設(shè)計、焊接】問題或經(jīng)驗
- 免費申請|Maxim 高性能模擬工具包(內(nèi)含78個器件)
- 【干貨視頻】走進(jìn)TE智能制造工廠,追蹤連接器綠色生產(chǎn)全過程
- TI有獎直播|精密 ADC 在變送器中的應(yīng)用
- 【EEWORLD大學(xué)堂】玩轉(zhuǎn)TI 易電源
- 基于藍(lán)牙協(xié)議的無線網(wǎng)絡(luò)化傳感器設(shè)計
- 單片機(jī)的大佬們,從STM32cubeMX生成的USB虛擬串口程序,需要改嗎?
- 急!Jumping to 0x0013A01C??
- 【新版CH554評測DIY】音頻校音器之9-結(jié)題
- C6000系列處理器 代碼優(yōu)化基本介紹
- proteldxp2004自制元件放置引腳問題
- 淺析arm匯編中^、!、cxsf符號和movs等指令使用學(xué)習(xí)
- 【FPGA助學(xué)系列—FPGA和CPLD的區(qū)別】
- LED應(yīng)用于家用市場的切入點
- 誰能給我發(fā)一份ATA Command集?而且創(chuàng)建命令之后一般把命令向哪發(fā)送?