『壹』 除了cpu之外,51單片機的片內都集成了哪些外圍功能部件
MCS-51單片機內部包含哪些主要邏輯功能部件有:(1)1個8位的微處理器CPU。(2)8KB的片內程序存儲器Flash ROM(51子系列的Flash ROM為4KB),用於燒錄運行的程序、常數數據。(3)256B的片內數據存儲器RAM(51子系列的RAM為128B),在程序運行時可以隨時。主要包括: 8位cpu 片內帶振盪器 片內數據存儲器 片內程序存儲器(不一定都有) 外部程序存儲器的定址定址功能單元 外部數據存儲器的定址定址功能單元 布爾數據定址單元 特殊功能寄存器定址單元 4個8位的I/O並行介面:P0、P1、P2、P3 兩個16位定時、計數器 兩個優先順序別的五個中斷源 一個全雙工的串列I/O介面,可多機通信。單片是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。
『貳』 51單片機接入乙太網的幾種方案
1、MAC+PHY方案
所謂的TCP/IP協議棧是一系列網路協議的統稱,不僅包括我們熟知的TCP協議和IP協議。
還有網路層的ICMP(Internet控制報文)協議、IGMP(Internet組管理)協議、ARP(地址解析)協議,傳輸層的UDP(用戶數據包)協議,應用層的HTTP(超文本傳輸)協議、DNS(域名解析)協議、FTP(文件傳送)協議、SMTP(簡單郵件管理)協議等等。
傳統的乙太網接入方案由MCU+MAC+PHY再加入網路介面實現乙太網的物理連接,通過在主控晶元中植入TCP/IP協議代碼實現通信及上層應用。
應用這種軟體TCP/IP協議棧方式實現的比較成熟方案有ENC28J60,CS8900A,DM9000,當然也有像STM32F107這類(內部自帶MAC)+PHY等方案。
2、硬體協議棧晶元方案
由MCU+硬體協議棧晶元(內含MAC和PHY)直接加網路介面,便可方便的實現單片機聯網,所有的處理TCP/IP協議的工作都是通過這位MCU的「小秘書」——硬體協議棧晶元來完成。
乙太網晶元的內核由傳輸層的TCP、UDP、ICMP、IGMP等協議、網路層的IP、ARP、PPPoE等協議以及鏈路層的MAC構成,再加上物理層的PHY和外圍的寄存器、內存、SPI介面組成了這一整套硬體化的乙太網解決方案。
這套硬體TCP/IP協議棧代替了以往的MCU來處理這些中斷請求,即MCU只需要處理面向用戶的應用層數據即可,傳輸層、網路層、鏈路層及物理層全部由外圍WIZnet的晶元完成。
這套方案從硬體開銷和軟體開發兩個方面來簡化前面所述的五層網路模型,簡化產品開發方案。這樣一來,工程師們就不必再面對繁瑣的通信協議代碼,只需要了解簡單的寄存器功能以及Socket編程便能完成產品開發工作的的網路功能開發部分。
(2)51單片機集成乙太網擴展閱讀
乙太網協議:
一個標準的乙太網物理傳輸幀由七部分組成。
PR SD DA SA TYPE DATA FCS
同步位 分隔位 目的地址 源地址 類型欄位 數據段 幀校驗序列 7 1 6 6 2 46~1500 4
除了數據段的長度不定外,其他部分的長度固定不變。數據段為46~1500位元組。乙太網規定整個傳輸包的最大長度不能超過1514位元組(14位元組為DA、SA、TYPE),最小不能小於60位元組。
除去DA、SA、TYPE14位元組,還必須傳輸46位元組的數據,當數據段的數據不足46位元組時需填充,填充字元的個數不包括在長度欄位里;超過1500位元組時,需拆成多個幀傳送。
事實上,發送數據時,PR、SD、FCS及填充欄位這幾個數據段由乙太網控制器自動產生;而接收數據時,PR、SD被跳過,控制器一旦檢測到有效的前序欄位(即PR、SD),就認為接收數據開始。
『叄』 關於51單片機上實現modbus協議
你找一個MODBUS的協議詳細資料好好看看,就是一種通訊約定,你按照它規定的格式通訊就可以了
協議發送給詢問方。 Modbus協議包括ASCII、RTU、TCP等,並沒有規定物理層。此協議定義了控制器能夠認識和使用的消息結構,而不管它們是經過何種網路進行通信的。標準的Modicon控制器使用RS232C實現串列的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊採用Maser/Slave方式,Master端發出數據請求消息,Slave端接收到正確消息後就可以發送數據到Master端以響應請求;Master端也可以直接發消息修改Slave端的數據,實現雙向讀寫。 Modbus協議需要對數據進行校驗,串列協議中除有奇偶校驗外,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗,但TCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。另外,Modbus採用主從方式定時收發數據,在實際使用中如果某Slave站點斷開後(如故障或關機),Master端可以診斷出來,而當故障修復後,網路又可自動接通。因此,Modbus協議的可靠性較好。 下面我來簡單的給大家介紹一下,對於Modbus的ASCII、RTU和TCP協議來說,其中TCP和RTU協議非常類似,我們只要把RTU協議的兩個位元組的校驗碼去掉,然後在RTU協議的開始加上5個0和一個6並通過TCP/IP網路協議發送出去即可。所以在這里我僅介紹一下Modbus的ASCII和RTU協議。 下表是ASCII協議和RTU協議進行的比較: 協議 開始標記 結束標記 校驗 傳輸效率 程序處理
ASCII :(冒號) CR,LF LRC 低 直觀,簡單,易調試
RTU 無 無 CRC 高 不直觀,稍復雜
通過比較可以看到,ASCII協議和RTU協議相比擁有開始和結束標記,因此在進行程序處理時能更加方便,而且由於傳輸的都是可見的ASCII字元,所以進行調試時就更加的直觀,另外它的LRC校驗也比較容易。但是因為它傳輸的都是可見的ASCII字元,RTU傳輸的數據每一個位元組ASCII都要用兩個位元組來傳輸,比如RTU傳輸一個十六進制數0xF9,ASCII就需要傳輸』F』』9』的ASCII碼0x39和0x46兩個位元組,這樣它的傳輸的效率就比較低。所以一般來說,如果所需要傳輸的數據量較小可以考慮使用ASCII協議,如果所需傳輸的數據量比較大,最好能使用RTU協議。
下面對兩種協議的校驗進行一下介紹。
1、LRC校驗
LRC域是一個包含一個8位二進制值的位元組。LRC值由傳輸設備來計算並放到消息幀中,接收設備在接收消息的過程中計算LRC,並將它和接收到消息中LRC域中的值比較,如果兩值不等,說明有錯誤。
LRC校驗比較簡單,它在ASCII協議中使用,檢測了消息域中除開始的冒號及結束的回車換行號外的內容。它僅僅是把每一個需要傳輸的數據按位元組疊加後取反加1即可。下面是它的VC代碼:
BYTE GetCheckCode(const char * pSendBuf, int nEnd)//獲得校驗碼
{
BYTE byLrc = 0;
char pBuf[4];
int nData = 0;
for(i=1; i<end; i+=2) //i初始為1,避開「開始標記」冒號
{
//每兩個需要發送的ASCII碼轉化為一個十六進制數
pBuf [0] = pSendBuf [i];
pBuf [1] = pSendBuf [i+1];
pBuf [2] = '\0';
sscanf(pBuf,"%x",& nData);
byLrc += nData;
}
byLrc = ~ byLrc;
byLrc ++;
return byLrc;
}
2、CRC校驗
CRC域是兩個位元組,包含一16位的二進制值。它由傳輸設備計算後加入到消息中。接收設備重新計算收到消息的CRC,並與接收到的CRC域中的值比較,如果兩值不同,則有誤。
CRC是先調入一值是全「1」的16位寄存器,然後調用一過程將消息中連續的8位位元組各當前寄存器中的值進行處理。僅每個字元中的8Bit數據對CRC有效,起始位和停止位以及奇偶校驗位均無效。
CRC產生過程中,每個8位字元都單獨和寄存器內容相或(OR),結果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨和預置的值或一下,如果LSB為0,則不進行。整個過程要重復8次。在最後一位(第8位)完成後,下一個8位位元組又單獨和寄存器的當前值相或。最終寄存器中的值,是消息中所有的位元組都執行之後的CRC值。
CRC添加到消息中時,低位元組先加入,然後高位元組。下面是它的VC代碼:
WORD GetCheckCode(const char * pSendBuf, int nEnd)//獲得校驗碼
{
WORD wCrc = WORD(0xFFFF);
for(int i=0; i<nEnd; i++)
{
wCrc ^= WORD(BYTE(pSendBuf[i]));
for(int j=0; j<8; j++)
{
if(wCrc & 1)
{
wCrc >>= 1;
wCrc ^= 0xA001;
}
else
{
wCrc >>= 1;
}
}
}
return wCrc;
}
對於一條RTU協議的命令可以簡單的通過以下的步驟轉化為ASCII協議的命令:
1、 把命令的CRC校驗去掉,並且計算出LRC校驗取代。
2、 把生成的命令串的每一個位元組轉化成對應的兩個位元組的ASCII碼,比如0x03轉化成0x30,0x33(0的ASCII碼和3的ASCII碼)。
3、 在命令的開頭加上起始標記「:」,它的ASCII碼為0x3A。
4、 在命令的尾部加上結束標記CR,LF(0xD,0xA),此處的CR,LF表示回車和換行的ASCII碼。
所以以下我們僅介紹RTU協議即可,對應的ASCII協議可以使用以上的步驟來生成。
下表是Modbus支持的功能碼:
功能碼 名稱 作用
01 讀取線圈狀態 取得一組邏輯線圈的當前狀態(ON/OFF)
02 讀取輸入狀態 取得一組開關輸入的當前狀態(ON/OFF)
03 讀取保持寄存器 在一個或多個保持寄存器中取得當前的二進制值
04 讀取輸入寄存器 在一個或多個輸入寄存器中取得當前的二進制值
05 強置單線圈 強置一個邏輯線圈的通斷狀態
06 預置單寄存器 把具體二進值裝入一個保持寄存器
07 讀取異常狀態 取得8個內部線圈的通斷狀態,這8個線圈的地址由控制器決定
08 回送診斷校驗 把診斷校驗報文送從機,以對通信處理進行評鑒
09 編程(只用於484) 使主機模擬編程器作用,修改PC從機邏輯
10 控詢(只用於484) 可使主機與一台正在執行長程序任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文發送後,本功能碼才發送
11 讀取事件計數 可使主機發出單詢問,並隨即判定操作是否成功,尤其是該命令或其他應答產生通信錯誤時
12 讀取通信事件記錄 可是主機檢索每台從機的Modbus事務處理通信事件記錄。如果某項事務處理完成,記錄會給出有關錯誤
13 編程(184/384 484 584) 可使主機模擬編程器功能修改PC從機邏輯
14 探詢(184/384 484 584) 可使主機與正在執行任務的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發送後,本功能碼才得發送
15 強置多線圈 強置一串連續邏輯線圈的通斷
16 預置多寄存器 把具體的二進制值裝入一串連續的保持寄存器
17 報告從機標識 可使主機判斷編址從機的類型及該從機運行指示燈的狀態
18 (884和MICRO 84) 可使主機模擬編程功能,修改PC狀態邏輯
19 重置通信鏈路 發生非可修改錯誤後,是從機復位於已知狀態,可重置順序位元組
20 讀取通用參數(584L) 顯示擴展存儲器文件中的數據信息
21 寫入通用參數(584L) 把通用參數寫入擴展存儲文件,或修改之
22~64 保留作擴展功能備用
65~72 保留以備用戶功能所用 留作用戶功能的擴展編碼
73~119 非法功能
120~127 保留 留作內部作用
128~255 保留 用於異常應答
在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現對下位機的數字量和模擬量的讀寫操作。
1、讀可讀寫數字量寄存器(線圈狀態):
計算機發送命令:[設備地址] [命令號01] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][01][00][13][00][25][CRC低][CRC高]
意義如下:
<1>設備地址:在一個485匯流排上可以掛接多個設備,此處的設備地址表示想和哪一個設備通訊。例子中為想和17號(十進制的17是十六進制的11)通訊。
<2>命令號01:讀取數字量的命令號固定為01。
<3>起始地址高8位、低8位:表示想讀取的開關量的起始地址(起始地址為0)。比如例子中的起始地址為19。
<4>寄存器數高8位、低8位:表示從起始地址開始讀多少個開關量。例子中為37個開關量。
<5>CRC校驗:是從開頭一直校驗到此之前。在此協議的最後再作介紹。此處需要注意,CRC校驗在命令中的高低位元組的順序和其他的相反。
設備響應:[設備地址] [命令號01] [返回的位元組個數][數據1][數據2]...[數據n][CRC校驗的低8位] [CRC校驗的高8位]
例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高]
意義如下:
<1>設備地址和命令號和上面的相同。
<2>返回的位元組個數:表示數據的位元組個數,也就是數據1,2...n中的n的值。
<3>數據1...n:由於每一個數據是一個8位的數,所以每一個數據表示8個開關量的值,每一位為0表示對應的開關斷開,為1表示閉合。比如例子中,表示20號(索引號為19)開關閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關量不是8的整倍數,那麼最後一個位元組的高位部分無意義,置為0。
<4>CRC校驗同上。
2、讀只可讀數字量寄存器(輸入狀態):
和讀取線圈狀態類似,只是第二個位元組的命令號不再是1而是2。
3、寫數字量(線圈狀態):
計算機發送命令:[設備地址] [命令號05] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][05][00][AC][FF][00][CRC低][CRC高]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:寫數字量的命令號固定為05。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的開關的地址。
<4>下置的數據高8位,低8位:表明需要下置的開關量的狀態。例子中為把該開關閉合。注意,此處只可以是[FF][00]表示閉合[00][00]表示斷開,其他數值非法。
<5>注意此命令一條只能下置一個開關量的狀態。
設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。
4、讀可讀寫模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][03][00][6B][00][03][CRC低][CRC高]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:讀模擬量的命令號固定為03。
<3>起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107。
<4>寄存器數高8位、低8位:表示從起始地址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個位元組。
設備響應:[設備地址] [命令號03] [返回的位元組個數][數據1][數據2]...[數據n][CRC校驗的低8位] [CRC校驗的高8位]
例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]
意義如下:
<1>設備地址和命令號和上面的相同。
<2>返回的位元組個數:表示數據的位元組個數,也就是數據1,2...n中的n的值。例子中返回了3個模擬量的數據,因為一個模擬量需要2個位元組所以共6個位元組。
<3>數據1...n:其中[數據1][數據2]分別是第1個模擬量的高8位和低8位,[數據3][數據4]是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。
<4>CRC校驗同上。
5、讀只可讀模擬量寄存器(輸入寄存器):
和讀取保存寄存器類似,只是第二個位元組的命令號不再是2而是4。
6、寫單個模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號06] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][06][00][01][00][03][CRC低][CRC高]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:寫模擬量的命令號固定為06。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。
<4>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為3。
<5>注意此命令一條只能下置一個模擬量的狀態。
設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。
『肆』 求助:單片機及嵌入式行業所具備的知識技能
進入嵌入式行業,勉強不來(轉)
覺得海同07年的分析(好像)不錯:
「海同教育總經理曲剛老師表示,市場上需要的嵌入式人才必須具備C語言編程經驗、嵌入式操作系統(主要包括嵌入式Linux、WinCE或 Symbian)經驗、內核裁剪經驗、驅動程序開發經驗,比如高級嵌入式軟體開發工程師相關職位要求是:有豐富的嵌入式多任務軟體系統分析和設計能力,能獨立完成項目系統方案,解決系統故障和問題、精通C語言應用開發,有良好的編程習慣和風格、良好的文檔編寫能力和習慣、熟悉項目管理流程。曲老師還特別指出,良好的英文閱讀能力及較強的學習能力是從事這一領域工作的基礎,對嵌入式操作系統做到一專而多能(精通嵌入式Linux,掌握WinCE及 Symbian)更會使求職者身價倍增。
目前國內外這方面的人都很稀缺。一方面,是因為這一領域入門門檻較高,不僅要懂較底層軟體(例如操作系統級、驅動程序級軟體),對軟體專業水平要求較高(嵌入式系統對軟體設計的時間和空間效率要求較高),而且必須懂得硬體的工作原理,所以非專業 IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,很多軟硬體技術出現時間不長或正在出現(如ARM處理器、嵌入式操作系統、MPEG技術、無線通信協議等),掌握這些新技術的人當然很難找。
嵌入式人才稀缺,身價自然就高。目前有很多公司將硬體設計包給了專門的硬體公司,稍復雜的硬體都交給台灣或國外公司設計;而對於軟體部分,大量的嵌入式公司自己開發,比如對於日本公司來說,由於國內人力成本過高,所以日本很多嵌入式軟體開發企業都把項目外包給中國的公司來完成,國內也有越來越多的企業來從事嵌入式軟體開發,近幾年,國內對嵌入式軟體人才需求倍增,僅僅北京市場嵌入式軟體開發人員的需求就已經超過了5萬人,而且還在持續增長。
嵌入式人才的工作環境與發展前景也有優勢。曲老師告訴記者:「從事嵌入式工作有兩大優勢:一是工作強度相對較低。開發企業應用軟體的IT企業,這個用戶的系統做完了,又得去做下一個用戶的,而且每個用戶的需求和完成時間都不同,開發人員往往疲於奔命,重復勞動;而做嵌入式系統的公司,都有自己的產品計劃,按自己的節奏行事,所開發的產品通常是通用的,不會因客戶的不同而修改,一個產品型號開發完了,往往還有較長一段空閑時間進行充電和休整。二是職業發展相對順利,從事企業應用軟體的人,工作范圍廣,項目變化大,日常的積累很難產生質變,容易遭遇職業瓶頸;而從事嵌入式軟體的人,所涉及的專業技術范圍就是那些,時間長了會越來越有經驗。」
以上都是針對求職工作而言,若對於個人整體發展來說,如果想創業,做自已的產品,那麼嵌入式更是一個不錯的主意,嵌入式軟體不會像應用軟體那樣容易被盜版,開發出專利產品,又何止年薪十萬。
入行得有專業基礎,那麼,應該如何快速成長為嵌入式人才呢?曲老師指出,嵌入式系統領域門檻較高,並不適合每個人,嵌入式開發人員不僅要懂較底層軟體,對軟體專業水平要求較高,要進入嵌入式系統開發領域工作,首先必須具備一定的C語言基礎,然後可以嘗試參加一些的相關培訓課程,接著可以尋找項目實踐的機會,增加項目經驗。「
還有網友的寶貴意見:
「二、嵌入式系統的分層與專業的分類。
嵌入式系統分為4層,硬體層、驅動層、操作系統層和應用層。
1、硬體層,是整個嵌入式系統的根本,如果現在單片機及介面這塊很熟悉,並且能用C和匯編語言來編程的話,從嵌入式系統的硬體層走起來相對容易,硬體層也是驅動層的基礎 ,一個優秀的驅動工程師是要能夠看懂硬體的電路圖和自行完成CPLD的邏輯設計的,同時還要對操作系統內核及其調度性相當的熟悉的。但硬體平台是基礎,增值還要靠軟體。
硬體層比較適合於,電子、通信、自動化、機電一體、信息工程類專業的人來搞,需要掌握的專業基礎知識有,單片機原理及介面技術、微機原理及介面技術、C語言。
2、驅動層,這部分比較難,驅動工程師不僅要能看懂電路圖還要能對操作系統內核十分的精通,以便其所寫的驅動程序在系統調用時,不會獨占操作系統時間片,而導至其它任務不能動行,不懂操作系統內核架構和實時調度性,沒有良好的驅動編寫風格,按大多數書上所說添加的驅動的方式,很多人都能做到,但可能連個初級的驅動工程師的水平都達不到 ,這樣所寫的驅動在應用調用時就如同windows下我們打開一個程序運行後,再打開一個程序時,要不就是中斷以前的程序,要不就是等上一會才能運行後來打開的程序。想做個好的驅動人員沒有三、四年功底,操作系統內核不研究上幾編,不是太容易成功的 ,但其工資在嵌入式系統四層中可是最高的。
驅動層 比較適合於電子、通信、自動化、機電一體、信息工程類專業尤其是計算機偏體系結構類專業的人來搞,除硬體層所具備的基礎學科外,還要對數據結構與演算法、操作系統原理、編譯原理都要十分精通了解。
3、操作系統層,對於操作系統層目前可能只能說是簡單的移植,而很少有人來自已寫操作系統,或者寫出缺胳膊少腿的操作系統來,這部分工作大都由驅動工程師來完成。操作系統是負責系統任務的調試、磁碟和文件的管理,而嵌入式系統的實時性十分重要。據說,XP操作系統是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟體所自己的女媧Hopen操作系統估計也得花遇幾百人年才能搞定。因此這部分工作相對來講沒有太大意義。
4、應用層,相對來講較為容易的,如果會在windows下如何進行編程介面函數調用,到操作系統下只是編譯和開發環境有相應的變化而已。如果涉及 Jave方面的編程也是如此的。嵌入式系統中涉及演算法的由專業演算法的人來處理的,不必歸結到嵌入式系統范疇內。但如果涉及嵌入式系統下面嵌入式資料庫、基於嵌入式系統的網路編程和基於某此應用層面的協議應用開發(比如基於SIP、H.323、Astrisk)方面又較為復雜,並且有難度了。
三、目標與定位。
先有目標,再去定位。
學ARM,從硬體上講,一方面就是學習介面電路設計,另一方面就是學習匯編和C語言的板級編程。如果從軟體上講,就是要學習基於ARM處理器的操作系統層面的驅動、移植了。這些對於初學都來說必須明確,要麼從硬體著手開始學,要麼從操作系統的熟悉到應用開始學,但不管學什麼,只要不是純的操作系統級以上基於API的應用層的編程,硬體的寄存器類的東西還是要能看懂的,基於板級的匯編和C編程還是要會的。因此針對於嵌入式系統的硬體層和驅動程的人,ARM的介面電路設計、ARM的C語言和匯編語言編程及調試開發環境還是需要掌握的 。
因此對於初學者必然要把握住方向,自己的目標是什麼,自己要在那一層面上走。然後再著手學習較好,與ARM相關的嵌入式系統的較為實際的兩個層面硬體層和驅動層 ,不管學好了那一層都會很有前途的。
如果想從嵌入式系統的應用層面的走的話,可能與ARM及其它體系相去較遠,要著重研究基嵌入式操作系統的環境應用與相應開發工具鏈,比如WinCe操作系統下的EVC應用開發(與windows下的VC相類似),如果想再有突破就往某些音視頻類的協議上靠,比如VOIP領域的基於SIP或H.323協議的應用層開發,或是基於嵌入式網路資料庫的開發等等。
對於初學者來講,要量力而行,不要認為驅動層工資高就把它當成方向了,要結合自身特點,嵌入式系統四個層面上那個層面上來講都是有高人存在,當然高人也對應的高工資,我是做硬體層的,以前每月工資中個人所得稅要被扣上近3千大元,當然我一方面充當工程師的角色,一方面充當主管及人物的角色,兩個職位我一個人干,但上班時間就那些。硬體這方面上可能與我PK的人很少了,才讓我拿到那麼多的工資。
四、開發系統選擇。
很多ARM初學者都希望有一套自己能用的系統,但他們住住會產生一種錯誤認識就是認為處理器版本越高、性能越高越好,就象很多人認為ARM9與ARM7 好,我想對於初學者在此方面以此入門還應該理智,開發系統的選擇最終要看自己往嵌入式系統的那個方向上走,是做驅動開發還是應用,還是做嵌入式系統硬體層設計與板級測試。如果想從操作系統層面或應用層面上走,不管是驅動還是應用,那當然處理器性能越高越好了,但這個東西自學,有十分大的困難,不是幾個月或半年或是一年二年能搞定的事。
在某種意義上請,ARM7與9的差別就是在某些功能指令集上豐富了些,主頻提高一些而已,就比如286和386。對於用戶來講可能覺查不到什麼,只能是感覺速度有些快而已。
ARM7比較適合於那些想從硬體層面上走的人,因為ARM7系列處理器內部帶MMU的很少,而且比較好控制,就比如S3C44B0來講,可以很容易將 Cache關了,而且內部介面寄存器很容易看明白,各種介面對於用硬體程序控制或AXD單步命令行指令都可以控制起來,基於51單片機的思想很容易能把他搞懂,就當成個32位的單片機,從而消除很多51工程師想轉為嵌入式系統硬體ARM開發工程師的困惑,從而不會被業界某此不是真正懂嵌入式爛公司帶到操作系統層面上去 ,讓他們望而失畏,讓業界更加缺少這方面的人才 。
而嵌入式系統不管硬體設計還是軟體驅動方面都是十分注重介面 這部分的,選擇平台還要考察一個處理器的外部資源,你接觸外部資源越多,越熟悉他們那你以後就業成功的機率就越高 ,這就是招聘時所說的有無「相關技能」,因為一個人不可能在短短幾年內把所有的處理器都接觸一遍,而招聘單位所用的處理器就可能是我們完全沒有見過的,就拿台灣數十家小公司(市價幾千萬)的公司生產的ARM類處理器,也很好用,但這些東西通用性太差,用這些處理器的公司就只能招有相關工作經驗的人了,那什麼是相關工作經驗,在硬體上講的是外圍介面設計 ,在軟體上講是操作系統方面相關介面驅動及應用開發經驗。 我從業近十年,2000年 ARM出現,我一天始做ARM7,然後直接跑到了Xscale(這個板本在ARM10-11之間),一做就是五年,招人面試都不下數百人,在這些方面還是深有體會的。
我個人認為三星的S3C44b0對初學者來說比較合適,為什麼這么說哪?因為介面資源比較豐富,技術成熟,資料較多,應該十分適合於初學者,有問題可能很容易找人幫且解決,因為大多數人都很熟悉,就如同51類的單片機,有N多位專家級的人物可以給你幫忙,相關問題得以很快解答,所然業界認為這款ARM都做用得爛了,但對於初學者來,就卻是件好事。
因此開發系統的選擇,要看自己的未來從來目標方向、要看開發板介面資源、還要看業界的通用性。
五、如何看待培訓。
首先說說我自己,我目前從業近十年,與國內嵌入式系統行業共同起步,一直站在嵌入式系統行業前沿,設計過多款高端嵌入式系統平台產品並為眾多公司提供過解決方案,離職前為從事VOIP的美資公司設計IP-PBX,歷任項目經理、項目主管、技術總監、部門經理,積累眾多人脈,並集多年經驗所得,考慮到學生就業與公司招人的不相匹配,公司想招人招不到,而學生和剛畢業的工程師想找份工作也不太容易,於此力創知天行科技有限公司,開展嵌入式系統教育培訓。
因一線的科研人員和一線的教師不相接觸,導至國內嵌入式人才缺乏,國外高校的技術超前於業界公司,而國內情況是業界公司方面的嵌入式系統技術要遠遠領先於高校 。為架構業界與高校溝通的橋梁,把先進技能帶給高校學子,為學生在就業競爭中打造一張王牌,並為業界工程師快速提升實現自我創造機遇,我就這樣辭去了外企年薪20多萬的職位,做嵌入式系統方面的培訓了。
對於培訓來講,是花錢來買時間 ,很多工程師都喜歡自己學,認為培訓不值,這也是有可能的,純為賺錢的培訓當然不會太有價值,但對於實力型的培訓他們可能就虧大了,有這樣一筆帳不知他們算過沒有,如果一個一周的培訓,能帶給他們自學兩年後才能掌握的知識,在培訓完後他們用三個月到半年時間消化培訓內容,這樣,他會省約至少一年半的時間來學其它的或重新站在另一個高度上工作,那麼他將最遲一年後會拿到他兩年後水平所對應的工資,就是在工資與水平對應的關繫上比同批人縮短一年,每月按最少1千計,再減去培訓費用至少多1.0萬,同時也省了一年時間,不管是休閑也好,再繼續提高也好,總之是跑到了隊伍的前面了。
另一層面上講,對於新人的培訓相當於他們為自己提前買了份失業保險,有師傅會帶領他們入道,我今年暑假時班裡最年輕的一個學生是大二的,今年才上大三,這學期才剛學單片機,但現在ARM方面的編程工作已經搞得有聲有色了,再過一年多畢業,他還會失業嗎?
再者通過培訓,你可以知道很多業界不為常人所知的事,同時也為自己找了個師傅,就比如說,兩個工程師分別用S3C2410和PXA255來做手持設備,同樣兩人都工作四年,再出去找工作,兩人工資可能最多可相差一倍,為什麼?這就是業界不為常人所知的規則,2410屬於民品,被業界用爛了,做產品時成本特敏感,當然也對人才成本敏感了,PXA255是intel的東西,一個255 CPU能買三個2410,一直被業界定義為貴族產品,用的公司都是大公司或為軍方服務的公司,不會在乎成本,只要把東西做好,一切都好說,但這方面做的人也少啊,因為開發系統貴啊。
對於說為自已找了個好師傅,我想是這樣的,因為同級工程師間存在著某此潛在的競爭關系,有很多人不願意把自己知道的東西教給別人,這意味著他將要失業,就是所說的教會徒弟,餓死師傅,但對於我們這些人就不存在這樣的關系了,我是在嵌入式系統平台設計上走到了一定程序,目前在國內這塊的技術上已經是自己很難再突破自己,因此很多東西我對大家都是OPEN的,就比如說下面那部分關於介面設計中所提到的時序介面東西,我要是不講,卻使是高級硬體工程師我想也幾乎只有10%的人能知道吧。
六、成為高級嵌入式系統硬體工程師要具備的技能。
首先我聲明,我是基於嵌入式系統平台級設計的,硬體這個方向我相對來講比較有發言權,如果是其它方面所要具備的基本技能還要和我們培訓中心其它專業級講師溝通,或去網站看看***。他們的方面上我只能說是知道些,但不是太多,初級的問題也可以問我。
對於硬體來講有幾個方向,就單純信號來分為數字和模擬,模擬比較難搞,一般需要很長的經驗積累,單單一個阻值或容值的精度不夠就可能使信號偏差很大。因此年輕人搞的較少,隨著技術的發展,出現了模擬電路數字化,比如手機的Modem射頻模塊,都採用成熟的套片,而當年國際上只有兩家公司有此技術,自我感覺模擬功能不太強的人,不太適合搞這個,如果真能搞定到手機的射頻模塊,只要達到一般程度可能月薪都在15K以上。
另一類就是數字部分了,在大方向上又可分為51/ARM的單片機類,dsp類,FPGA類,國內FPGA的工程師大多是在IC設計公司從事IP核的前端驗證,這部分不搞到門級,前途不太明朗,即使做個IC前端驗證工程師,也要搞上幾年才能勝任。dsp硬體介面比較定型,如果不向驅動或是演算法上靠攏,前途也不會太大。而ARM單片機類的內容就較多,業界產品佔用量大,應用人群廣,因此就業空間極大,而硬體設計最體現水平和水準的就是介面設計這塊,這是各個高級硬體工程師相互PK,判定水平高低的依據。而介面設計這塊最關鍵的是看時序,而不是簡單的連接,比如PXA255處理器I2C要求速度在 100Kbps,如果把一個I2C外圍器件,最高還達不到100kbps的與它相接,必然要導致設計的失敗。這樣的情況有很多,比如51單片機可以在匯流排接LCD,但為什麼這種LCD就不能掛在ARM的匯流排上,還有ARM7匯流排上可以外接個Winband的SD卡控制器,但為什麼這種控制器接不到ARM9 或是Xscale處理器上,這些都是問題。因此介面並不是一種簡單的連接,要看時序,要看參數。一個優秀的硬體工程師應該能夠在沒有參考方案的前提下設計出一個在成本和性能上更加優秀的產品,靠現有的方案,也要進行適當的可行性裁剪,但不是胡亂的來,我遇到一個工程師把方案中的5V變1.8V的DC晶元,直接更換成LDO,有時就會把CPU燒上幾個。前幾天還有人希望我幫忙把他們以前基於 PXA255平台的手持GPS設備做下程序優化,我問了一下情況,地圖是存在SD卡中的,而SD卡與PXA255的MMC控制器間採用的SPI介面,因此導致地圖讀取速度十分的慢,這種情況是設計中嚴重的缺陷,而不是程序的問題,因此我提了幾條建議,讓他們更新試下再說。因此想成為一個優秀的工程師,需要對系統整體性的把握和對已有電路的理解,換句話說,給你一套電路圖你終究能看明白多少,看不明白80%以上的話,說明你離優秀的工程師還差得遠哪。其次是電路的調試能力和審圖能力,但最最基本的能力還是原理圖設計PCB繪制,邏輯設計這塊。這是指的硬體設計工程師,從上面的硬體設計工程師中還可以分出 ECAD工程師,就是專業的畫PCB板的工程師,和EMC設計工程師,幫人家解決EMC的問題。硬體工程師再往上就是板級測試工程師,就是C語功底很好的硬體工程師,在電路板調試過程中能通過自已編寫的測試程序對硬體功能進行驗證。然後再交給基於操作系統級的驅動開發人員。
總之,硬體的內容很多很雜,硬體那方面練成了都會成為一個高手,我時常會給人家做下方案評估,很多高級硬體工程師設計的東西,經常被我一句話否定,因此工程師做到我這種地步,也會得罪些人,但硬體的確會有很多不為人知的東西,讓很多高級硬體工程師也摸不到頭腦。
那麼高級硬體件工程師技術技能都要具備那些東西哪,首先要掌握EDA設計的輔助工具類如Protel\ORCAD\PowperPCB\Maplux2 \ISE、VDHL語言,要能用到這些工具畫圖畫板做邏輯設計,再有就是介面設計審圖能力,再者就是調試能力,如果能走到總體方案設計這塊,那就基本上快成為資深工程師了。
硬體是要靠經驗,也要靠積累的,十年磨一劍,百年磨一針。 」
『伍』 單片機通過乙太網通信
通常,單片機或嵌入式系統使用的乙太網晶元(例如常用的晶元w5100)在晶元級集成了tcp協議棧(實現了tcp/ip和udp/ip等標准協議)。因此,使用這些晶元與上位機通信,通常採用socket方式通信。
上位機採用c#進行socket編程可以實現你的要求。
『陸』 幾塊51單片機可不可以通過乙太網集線器連在一起,然後再連一部電腦,互相通訊啊
可以,但難度還是很大的,你可以買塊智信51開發板,他們做的有網口。
『柒』 求51單片機實驗設備儀器DP-51PROC的實驗指導書
51單片機實驗設備儀器DP-51PROC的實驗指導書
談談單片機實驗指導方法
http://ckrd.cnki.net/grid20/detail.aspx?filename=SYSY199202006&dbname=CJFD1992
http://search.cnki.net/search.aspx?q=%E5%8D%95%E7%89%87%E6%9C%BA%E5%AE%9E%E9%AA%8C%E8%AE%BE%E5%A4%87%E4%BB%AA%E5%99%A8%E7%9A%84%E5%AE%9E%E9%AA%8C%E6%8C%87%E5%AF%BC%E4%B9%A6
『捌』 51單片機實現TCP/IP
51 + 嵌入式乙太網晶元.OK 了
到這里有你想要的:
http://www.bocon.com.cn/index.php?option=com_content&task=view&id=317&Itemid=670&gclid=CP70rIKr2aECFQMXewodwVLpHA
但價格有點貴.
普通51做不了 TCP/IP, 在下面找一款大 RAM(1K以上) 的搞定
http://www.mcu-memory.com/
不用寫 TCP/IP協議棧,只要會配置晶元就行了.主要工作集中到應用的開發.
如果你的時間多,或者資金不多的情況下,就用回你一開始說的方法.這時你只能還得要花一大半時間在移植協議棧方面(當然網上有移植好的,但還要時間消化).協議棧就用uIP 或 LwIP
『玖』 如何使用KSZ8041NL實現與單片機的乙太網通訊!求大神指點啊!!!
KSZ8041NL是TII/RMII物理層收發器,沒有協議控制器,因此上是不能和沒有ethernet協議控制器的單片機晶元相互連接的,如8051系列,或者msp430系列。有些arm晶元,如stm32F207,內部帶有協議控制器,可以和KSZ8041NL相連。
對於不帶控制協議的單片機,若一定需要使用晶元連接,可使用RTL8019,DM9000之類的帶有協議控制器的乙太網晶元。
普通51系列單片機,由於運算速度慢,做網路控制不大合適,msp430系列,avr系列,運算速度比較快,作為小數據量的乙太網通信,還是可行的,網上也有例子。