用8051做出了一個(gè)帶modem的、能穩(wěn)定工作的email machine。
以下是開發(fā)過(guò)程中的一些經(jīng)驗(yàn),供大家參考:
1. 選個(gè)好點(diǎn)的仿真器,要有硬件斷點(diǎn),帶C語(yǔ)言源碼調(diào)試的。我用wave的,還不錯(cuò)
2. 單片機(jī)大概需要外接至少4k的SRAM。
3. modem芯片可以用conexant的RC224,或TDK的(型號(hào)記不清楚了)。速度慢但容易控制,還便宜。
4. 先在你實(shí)驗(yàn)室用linux模擬一個(gè)ISP,要總是撥169調(diào)試電話費(fèi)會(huì)讓你破產(chǎn),而且還無(wú)法監(jiān)視運(yùn)行的狀況。如何建立ISP在linux版精華區(qū)有詳細(xì)的介紹。
5. 仔細(xì)設(shè)計(jì)電路板。modem板子比較講究,一定要主意模擬和數(shù)字的隔離。找個(gè)好點(diǎn)的廠做板,焊接好一些,板子和焊接的虧我吃得太多了�?�,不說(shuō)了。
6. 準(zhǔn)備好示波器和邏輯分析儀。我開發(fā)基本都完成了才有示波器,邏輯分析儀到現(xiàn)在還沒(méi)有。如果有的化會(huì)少走很多彎路。
7. 需要實(shí)現(xiàn)的網(wǎng)絡(luò)協(xié)議:
a. PPP。所有通過(guò)modem上網(wǎng)的東東第一層就是這個(gè)。很少有書詳細(xì)介紹,大家可以參考RFC1661、RFC1662。需要注意的是有的ISP的報(bào)頭是壓縮的,169就是這樣。你的程序要能夠處理這種情況。還有的并不要求LCP。
b. IP。在各層的協(xié)議當(dāng)中IP相對(duì)簡(jiǎn)單一些,這種應(yīng)用并不需要處理諸如
ICMP和IGMP之類的東西。
c. TCP。這是最頭疼的東西,一大堆狀態(tài)。在8051這樣的應(yīng)用當(dāng)中,我們遵循的原則
是:能省的就省。我沒(méi)有考慮IP分片,也沒(méi)有考慮TCP超時(shí)重發(fā),甚至沒(méi)有計(jì)算收到的TCP包校驗(yàn)和是否正確。這一切只為節(jié)省CPU的開銷。不是我舍不得,所有用過(guò)8bit單片機(jī)的人都明白這為什么。實(shí)踐大概可以證明,再發(fā)幾十上百個(gè)字節(jié)這樣
的應(yīng)用當(dāng)中,IP不會(huì)分片,TCP順序也不會(huì)打亂。實(shí)際上ISP的MTU是1500,而Windowsize一般也遠(yuǎn)遠(yuǎn)大于幾百。對(duì)了,TCP里還有一個(gè)port authentication很棘手,
原來(lái)把這個(gè)東西忽略了,以至于發(fā)一封郵件要很長(zhǎng)時(shí)間甚至發(fā)不出去。RFC里也沒(méi)有說(shuō)得很清楚。后來(lái)發(fā)覺(jué)返回一個(gè)端口為0x0071的TCP包頭就能夠解決這個(gè)問(wèn)題�,F(xiàn)在發(fā)一封郵件大概需要2分鐘左右。
d. SMTP。不多說(shuō)了,實(shí)現(xiàn)了前面三個(gè)協(xié)議,SMTP就很小兒科了。我的整個(gè)板子尺寸是118X70mm,如果不用DIP40的89C54還能小些。