3. 接收数据帧。
if(io_mode==1)
for (i = 0; i < RX_length; i++)
RX_data=DM9000_inb(DM9000_DATA);
else if(io_mode==0)
{Length_tmp= (RX_length +1)/2;
for (i = 0; i < Length_tmp; i++)
(u16 *) RX_data=DM9000_inw(DM9000_DATA);}
4. 对接收的数据帧进行错误检验。
if((RX_status & 0xbf00) || (RX_length < 0x40)|| (RX_length > 1536)) {
if (RX_status & 0x100) {
printf("rx fifo error ");} /*FIFO溢出错误*/
if (RX_status & 0x200) {
printf("rx crc error ");} /*CRC校验和错误*/
if (RX_status & 0x8000) {
printf("rx length error ");} /*接收的帧小于64字节*/
if (RX_length > 1536) {
printf("rx length too big "); /*接收的帧大于1536字节*/
dm9000_reset();}
}
为了实现嵌入式系统在上电后自动通过TFTP从主机下载并运行μClinux操作系统,需要设置U-Boot的自启动命令。下面的命令是设置环境变量tftp_boot,它包含的操作是通过tftp命令将文件名为uImage的文件从主机下载至目标系统的0x1000000地址处。下载完毕之后,从0x1000000处对嵌入式操作系统解压缩并运行:
set tftp_boot ‘tftp 0x1000000 uImage;bootm 0×1000000’
接下来将tftp_boot设置为自启动命令:
set bootcmd run tftp_boot
还可以通过设置bootdelay环境变量来改变U-Boot运行自启动命令之前的等待时间。
最后要使用U-Boot的save命令来将刚才设置的环境变量保存到Flash中。