以太网□存储及初始化
发布时间:2008/12/31 0:00:00 访问次数:1159
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)