以太網□存儲及初始化
發布時間:2008/12/31 0:00:00 訪問次數:1148
rtl8019as內部有ram,地址范圍從0x0000~oxtffff,其中0x4000~oxtffff用作接收和發送緩沖區。
1.如何讀寫ram
rtl8019as內部ram是雙口ram,因為它要支持兩個獨立的操作,一個是用戶cpu讀取ram中的內容,對這個操作rtl8019as提供一個讀寫口,也就是寄存器中的remote dma port;另一個是rtl8019as內部控制電路把從網絡接收的數據寫入ram中,這時ram稱為local dma。rtl8019as通過local dma寫入ram是不用用戶干涉的,它通過remote dma port讀寫ram。
讀ram見rtlreadram函數。這個函數表示從地址address開始讀取slze個字節的內容到buff指針指向的內存中。設置or寄存器為:
writereg(cr'(0xoo | cr_remote_write | cr_start_cofjmand))
然后從remote dma port讀取slze次,就得到所需的數據。
寫ram使用rtlwriteram函數,操作基本上和讀ram差不多,只要將設置cr寄存器語句改成如下語句即可。
writereg(cr'(oxo0 | cr_remote_read | cr_start_coiimand))
最后一步的讀slze次改成寫size次就可以了。
2.發送和接收緩沖區
0x4000~oxtfff的接收和發送緩沖區,可以分為發送緩沖區和接收緩沖區。緩沖區是按頁管理的,256字節為一頁,這樣接收發送緩沖頁面是從0x40到0x7f。發送緩沖區的起始頁在tpsr寄存器中設置,接收緩沖區的起始頁在pstart寄存器中設置,pstart實際上也表明了發送緩沖區的結束頁,接收緩沖區的結束頁是pstop。所以發送緩沖區的頁從tpsr到pstart-1,接收緩沖區的頁從pstart到pstop-1。
接下來的問題是接收和發送緩沖各占多少才合適。這里設置如下:
讓發送緩沖區可以容納下兩個最大以太網幀(最大的以太網幀大小是1514bytes),第一個幀放在send_start page0起始頁,第二個幀放在send_start page1起始頁,剩下的緩沖區都作為接收緩沖區。
3.以太網口初始化
初始化第一步是復位以太網口。以太網口復位分為硬件復位和軟件復位。硬件復位通過給rtl8019as的rst引腳一個脈沖來復位以太網口。軟件復位通過寫resetport達到復位,也就是給18~if之間的任意一個寄存器寫入任意一個數,就使得以太網口復位。第二步是設置一些寄存器的初始值。寄存器保存本機以太網的物理地址,只有和寄存器保存的物理地址相同的以太網幀才被接收(如果rcr中pro=0的話)。
以太網口第一次復位必須是硬件復位,也就是說使用以太網口前一定要先硬件復位。另外,硬件復位以后要經過大約10ms的等待才能對以太網口操作,特別是發送和按收操作。
4.以太網口驅動
以太網口的驅動程序是/arm/kernel/linux/drivers/net/這個文件。修改這個文件的第500行,改成如下形式:
for (offset=1;offset<(buf[0]& oxff)/2;offset++) {
之所以這樣修改,是因為這個循環的循環次數取決于以太網接口模塊所匹配的存儲器的容量,該驅動程序中沒有進行存儲器的容量探測,而是直接采用以太網接口默認的匹配容量,但是硬件板所采用的存儲器的容量是默認容量的一半,所以這里將循環次數減少一半。
歡迎轉載,信息來源維庫電子市場網(www.dzsc.com)
rtl8019as內部有ram,地址范圍從0x0000~oxtffff,其中0x4000~oxtffff用作接收和發送緩沖區。
1.如何讀寫ram
rtl8019as內部ram是雙口ram,因為它要支持兩個獨立的操作,一個是用戶cpu讀取ram中的內容,對這個操作rtl8019as提供一個讀寫口,也就是寄存器中的remote dma port;另一個是rtl8019as內部控制電路把從網絡接收的數據寫入ram中,這時ram稱為local dma。rtl8019as通過local dma寫入ram是不用用戶干涉的,它通過remote dma port讀寫ram。
讀ram見rtlreadram函數。這個函數表示從地址address開始讀取slze個字節的內容到buff指針指向的內存中。設置or寄存器為:
writereg(cr'(0xoo | cr_remote_write | cr_start_cofjmand))
然后從remote dma port讀取slze次,就得到所需的數據。
寫ram使用rtlwriteram函數,操作基本上和讀ram差不多,只要將設置cr寄存器語句改成如下語句即可。
writereg(cr'(oxo0 | cr_remote_read | cr_start_coiimand))
最后一步的讀slze次改成寫size次就可以了。
2.發送和接收緩沖區
0x4000~oxtfff的接收和發送緩沖區,可以分為發送緩沖區和接收緩沖區。緩沖區是按頁管理的,256字節為一頁,這樣接收發送緩沖頁面是從0x40到0x7f。發送緩沖區的起始頁在tpsr寄存器中設置,接收緩沖區的起始頁在pstart寄存器中設置,pstart實際上也表明了發送緩沖區的結束頁,接收緩沖區的結束頁是pstop。所以發送緩沖區的頁從tpsr到pstart-1,接收緩沖區的頁從pstart到pstop-1。
接下來的問題是接收和發送緩沖各占多少才合適。這里設置如下:
讓發送緩沖區可以容納下兩個最大以太網幀(最大的以太網幀大小是1514bytes),第一個幀放在send_start page0起始頁,第二個幀放在send_start page1起始頁,剩下的緩沖區都作為接收緩沖區。
3.以太網口初始化
初始化第一步是復位以太網口。以太網口復位分為硬件復位和軟件復位。硬件復位通過給rtl8019as的rst引腳一個脈沖來復位以太網口。軟件復位通過寫resetport達到復位,也就是給18~if之間的任意一個寄存器寫入任意一個數,就使得以太網口復位。第二步是設置一些寄存器的初始值。寄存器保存本機以太網的物理地址,只有和寄存器保存的物理地址相同的以太網幀才被接收(如果rcr中pro=0的話)。
以太網口第一次復位必須是硬件復位,也就是說使用以太網口前一定要先硬件復位。另外,硬件復位以后要經過大約10ms的等待才能對以太網口操作,特別是發送和按收操作。
4.以太網口驅動
以太網口的驅動程序是/arm/kernel/linux/drivers/net/這個文件。修改這個文件的第500行,改成如下形式:
for (offset=1;offset<(buf[0]& oxff)/2;offset++) {
之所以這樣修改,是因為這個循環的循環次數取決于以太網接口模塊所匹配的存儲器的容量,該驅動程序中沒有進行存儲器的容量探測,而是直接采用以太網接口默認的匹配容量,但是硬件板所采用的存儲器的容量是默認容量的一半,所以這里將循環次數減少一半。
歡迎轉載,信息來源維庫電子市場網(www.dzsc.com)