DM9051_SPI网卡驱动于EC200T 4G模块有线网口驱动添加指导

 

DM9051_SPI网卡驱动于EC200T 4G模块有线网口驱动添加指导

 

 

 

目录

前言…………………………………………………………………………………………………3

应用简介…………………………………………………………………………………………… 4

1.方案介绍 

1-1.4G模块介绍 ……………………………………………………………………………………5

1-2.  DM9051NP网卡芯片介绍…………………………………………………………………… 5

2.实验环境 

2-1. 应用:Cat.4 ,4G监控摄像头……………………………………………………………… 6

2-2. Cat.1 +有线以太网口应用 …………………………………………………………………6

3.硬件部分 

3-1 .硬件环境……………………………………………………………………………………… 7

4.软件部分 ………………………………………………………………………………………… 8

4-1.引言 

4-2.DM9051NP驱动部分…………………………………………………………………………… 8

4-2-1. DM9051NP驱动源代码参考 ……………………………………………………………… 10

4-3设备树DTS (Device tree source) …………………………………………………………11

4-3-1.DTS实作 …………………………………………………………………………………… 12

4-4. DMA模式 ………………………………………………………………………………………13

5.固件烧入 ………………………………………………………………………………………… 16

6.测试

6-1局域网测试……………………………………………………………………………………… 18

6-2访问公网测试…………………………………………………………………………………… 19

6-3视频测试………………………………………………………………………………………… 20

 

 

前言

本文档介绍在M2M通信的应用-4G监控摄像头,于Cat4模块上,如何添加DM9051 SPI网卡驱动。而当红的Cat.1模块亦可依照本文操作方式加入。

 

 

应用简介

A:4G监控摄像头:此作法使用ASR1802的SPI接口来接收摄像头的录像数据,DM9051NP在这个应用上,相当于一个转接芯片,架构为:监控摄像头 DM9051NPSPI接口--移远EC200T(ASR1802)。

B:由于4G模块的应用普及,不仅是Cat4,当前火热的Cat1在各行业的应用,如CPEPOS机、智能监控、环境管理或充电桩等,相关应用需要有线以太网口,将数据上传到远程后台,进行远程控制等,都可以采用此相同作法。

 

1.方案介绍

1-1.  4G模块介绍

4G模块是上海移远通信EC200T,是一款LTE Cat 4 通信模块,支持最大下行速率150 Mbps和最大上行速率 50 MbpsEC200T内置丰富的网络协议,集成多个工业标准接口,拓展了其在M2M(机器对机器)通信的应用范围,如安防监控摄像头、 OTTCPE、路由器、数据卡、平板电脑以及工业级 PDA 等。

 

上海移远通信EC200T使用到上海翱捷科技ASR1802ASR1802所有竞品中系统最小,采用RTOSLinux操作系统,采用ASR1802芯片的宽带MiFi终端已经销售到全球各运营商,并获得运营商认证,如中国CMCC,韩国SKK,日本,东南亚,印度Airtel,俄罗斯Beeline,非洲MTN等。

 

1-2.  DM9051NP网卡芯片介绍

DM9051NP SPI接口网卡芯片是为了方便互联网行业进行以太网通信而开发出的解决方案。DM9051NP芯片是带有行业标准串列外设接口(Serial Peripheral InterfaceSPI)的独立以太网控制器。DM9051NP符合IEEE 802.3 规范,它还支持以DMA 模式來传输,以实现资料传送快速。DM9051NP通过1个中断引脚和SPI接口來进行与主控制器/MCU单片机的通信,资料传输规格为10/100 M

•Package:32支接脚封装,QFN.

•IEEE 802.3az Energy Efficient Ethernet (EEE)

•Built-in integrated 3.3V to 1.8V regulator

远程唤醒 (WOL)

并行线/交叉线自动切换 (HP Auto-MDIX)

•Support 光口界面

•EMI (Class B) and HBM ESD Rating 8KV

工业温度规范: –40 to +85

连续工作温度<60

 

2.实验环境

2-1. 应用:Cat.4 ,4G监控摄像头:

硬件架构:摄像头ß à DM9051NPSPI接口--移远EC200T(ASR1802) ß à 4G

 

2-2. Cat.1 +有线以太网口应用:

    其他应用DM9051NPSPI接口ASR3601/春藤8910DM

3.硬件部分

3-1 .硬件环境

    DM9051NP通过SPI接口控制内部寄存器,并有中断输出接口。EC200T(ASR1802)通过SPI1DM9051NP相连。具体接口如下:

 

 

DM9051NP

EC200T

(ASR1802)

SPI_CS

Pin17

Pin37

SPI_MOSI

Pin19

Pin38

SPI_MISO

Pin20

Pin39

CPI_CLK

Pin18

Pin40

INT

Pin24

Pin18

3-2. SPI硬件接线部分

 

图一:EC200T(ASR1802)DM9051NP SPI硬件设计

SPI信号线说明,通常SPI通过4个引脚与外部器件相连:

  1. MISO : 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
  2. MOSI : 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
  3. SCK : 串口时钟,作为主设备的输出,从设备的输入
  4. NSS : 从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为片选引脚,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

 

4.软件部分

4-1.引言

    DM9051ASR1802 Linux上导入为例,在Linux核心添加 DM9051驱动,DM9051SPI接口,需具体实现SPI传输功能,DM9051网络数据包送收程序,及依据SPI master特性而扩增的DMA传输模式设置。

    因为要采用DTSDMA模式,除了要进行DTS相关的设置之外,也对DM9051驱动加入DMA的相关参数,然后,再来挂载驱动。当驱动跑起来时,通过DTS取得组态设置参数,然后,让芯片正常运行。

 

4-2.DM9051NP驱动部分

      DM9051NP驱动压缩文件解压,然后将整个包放到ql-ol-sdk/ql-ol-crosstool/package目录下,然后在ql-ol-sdk/ql-ol-crosstool目录下make menuconfig;

 

 3  menuconfig

路径:Kernel modules à SPI Support à kmod-ql_spi_net

以上步骤做完后在ql-ol-sdk下make -j6 V=99会在ql-ol-sdk/target目录下生成版本包,将版本包烧进模块,使用insmod /lib/modules/3.10.33/dm9051.ko 加载驱动即可

加载成功后可看到如下所示

 

 4  网卡驱动加载LOG

 5  成功显示网卡

 

 

4-2-1. DM9051NP驱动源代码参考:

查看dm9051_init_dm9051函数, 相关内容如下:

iow(db, DM9051_GPCR, GPCR_GEP_CNTL); /* 让GPIO0输出*/





  phy4= dm9051_phy_read(dev, 0, MII_ADVERTISE);

  dm9051_phy_write(dev, 0, MII_ADVERTISE, phy4 | ADVERTISE_PAUSE_CAP);

/* dm95 flow-control RX! */

  dm9051_phy_read(dev, 0, MII_ADVERTISE);



/* Program operating register */

iow(db, DM9051_TCR, 0);         /* TX Polling clear清除TX轮询*/

iow(db, DM9051_BPTR, 0x3f); /* Less 3Kb, 200us */

iow(db, DM9051_SMCR, 0);         /* Special Mode */

/* clear TX status清除TX状态 */

iow(db, DM9051_NSR, NSR_WAKEST | NSR_TX2END | NSR_TX1END);

iow(db, DM9051_ISR, ISR_CLR_STATUS); /* Clear interrupt status清除中断状态 */



/* Init Driver variable */

db->imr_all = IMR_PAR | IMR_PRM; /* "| IMR_PTM" */

    #ifdef JABBER_PACKET_SUPPORT

db->rcr_all= RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN | 

RCR_DIS_WATCHDOG_TIMER;

    #else

db->rcr_all= RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN;

    #endif



/*

 * (Set address filter table) 

 * After.call.ndo_open

 * "kernel_call.ndo_set_multicast_list.later".

*/

  dm9051_fifo_reset(1, NULL, db); // 'NULL' for reset FIFO, and no increase the RST counter

  int_reg_stop(db);



……

>>> 欢迎交流!

 

 

 


4-3设备树DTS (Device tree source)

  1. 基本概念Linux內核源碼中,存在大量對細節信息描述的代碼。這些代碼在/arch/arm/plat-xxx和/arch/arm/mach-xxx目錄,對內核而言這些platform設備、resource、i2c_board_info、spi_board_info以及各種硬件的platform_data絕大多數属于垃圾冗长的代碼。為了解決這一問題,ARM內核版本3.x之後引入了原先在Power PC等其他體系架構已經使用的Flattened Device Tree.
  2. 在我们在进行DM9051NP驱动调试之前,要先进行DM9051NP 驱动的DTS参数设置,让CPU SPI master能够对应DM9051NP的设置,操作指南如下: 
  1. DM9051NP驱动参数设置  依照开发者的需求,写入conf_ver.h来设置DM9051NP驱动(建议:只编辑conf_verh)
  2. 为了完善源代码架构,请在conf_verh添加下列函数:

#define DM_CONF_APPSRC

#define DM_CONF_DBGSRC

  1. #define DM_CONF_DTSSRC 創建一個软件模块(dm9051.ko)请在conf_verh添加下列函数:
  2. #define DM_CONF_MODULE 當對驅動进行设置时添加DM_CONF_PHYPOLL是很重要的:

#define DM_CONF_PHYPOLL

  1. 当使用DTS设备树时请在conf_verh添加下列函数

#define DTS_CONF_YES

说明:在你的DTS描述符中,请定义 

1.)最高SPI时钟速度。

2.)中断模式与中断IRQ号。

3.)中断主动极性。

4.)SPI bus_num以及 SPI片选(有需要才设置)

  1. 如果不使用DTS的话,请改用下列方式,添加到_ver.h”

*因为不使用DTS,请定义你的SPI时钟速度:

#define DM_CONF_MAX_SPEED_HZ 15600000

*因为不使用DTS,当使用中断模式时,亦需中断IRQ数字以及主动极性:

#define DM_CONF_INTERRUPT /*设定的中断号*/

#define DM_CONF_INTERRUPT_IRQ  26  

#define DM_CONF_INTERRUPT_LOW_ACTIVE

*由于不使用DTS,请依照下列函数来定义SPI bus number 如果没有定义的话,SPI bus number将为0

#define DM_CONF_SPI_BUS_NUMBER 0

*由于不使用DTS,请依照下列函数来定义SPI片选。 如果没有定义的话,SPI bus number将为0

#define DM_CONF_SPI_CHIP_SELECT 1

 

4-3-1.DTS实作

看完了DM9051NP 驱动的DTS参数设置指南之后,让我们来实作一下:

1.)配置SPI CLK:

ql-ol-sdk/ql-ol-uboot/board/Marvell/nezas_p201/nezas_p201.c文件中配置SPI时钟,增加如下代码:

#ifdef CONFIG_ASR_SPI

#define APBC_PHYS_BASE          (0xd4000000 + 0x015000)

#define APBC_SSP0               (APBC_PHYS_BASE + 0x01c)

#endif

 

 1  SPI CLK配置

 

ql-ol-sdk/ql-ol-uboot/board/Marvell/nezas_p201/nezas_p201.c文件中配置SPI时钟,增加如下代码

代码如下

#ifdef CONFIG_ASR_SPI

        __raw_writel(0x17, APBC_SSP0);

        mdelay(1);

        __raw_writel(0x13, APBC_SSP0); //ssp0 @13M

        /* bit[6:4] of APBC_SSP0

        * 0x0 = 6.5MHz

        * 0x1 = 13MHz

        * 0x2 = 26MHz

        */

#endif

 2  SPI CLK配置

 

注意 __raw_writel(0x17, APBC_SSP0); __raw_writel(0x13, APBC_SSP0);中当前配置的SPI时钟是13M如果要设置成26M则将其中的0x17、0x13改成0x27和0x23。这里如不添加,则默认6.5M

4-4. DMA模式

这是依据SPI master特性而扩增的应用,各家SOC芯片供货商的实现方式可能略有不同.如何开启DM9051 DMA模式来接收与发送数据?  请先在CPU开启DMA模式,然后DM9051驱动做对应的设置。


1.)请查看dm9051_probe函数, 内容如下: 

SubNetwork_SPI_Init(db, 1);



2.)再查看SubNetwork_SPI_Init函数, 内容如下: 

SPI_GPIO_SetupPwrOn(db);

  SPI_GPIO_Setup(db); //mt_dm9051_pinctrl_init(db->spidev); //or, SPI_GPIO_Set(1);

  SPI_SPI_Setup(db);



3.)再查看SPI_SPI_Setup函数, 内容如下: 

SPI_PARAM_Set(db);

#if DM_DM_CONF_RARE_PROJECTS_DTS_USAGE

  /*当处于DTS模式时,请在DTS文件中定义SPI最高速度是多少*/

#else

  db->spidev->max_speed_hz= dm9051_spi_board_devs[0].max_speed_hz;

#endif

#if DM_DM_CONF_RARE_PROJECTS_DTS_USAGE

/*当处于DTS模式时,请在DTS文件中定义SPI最高速度是多少*/

#else

db->spidev->mode = SPI_MODE_0;

db->spidev->bits_per_word = 8;

printk("%s Driver spi_setup()\n", CARDNAME_9051);

if(spi_setup(db->spidev)){

printk("[dm95_spi] spi_setup fail\n");

return;

}

#endif

4.)再查看SPI_PARAM_Set函数, 内容如下: 

 struct mt_chip_conf *spi_par = (struct mt_chip_conf *) db->spidev->controller_data; 

if(!spi_par){

printk("[dm95_spi] spi config fail");

return;

}

spi_par->setuptime = 15; 

spi_par->holdtime = 15; 

spi_par->high_time = 10;      

spi_par->low_time = 10;

spi_par->cs_idletime = 20;



spi_par->rx_mlsb = 1;

spi_par->tx_mlsb = 1;  

spi_par->tx_endian = 0;

spi_par->rx_endian = 0;



spi_par->cpol = 0;

spi_par->cpha = 0;

 #if DMA3_P2_MSEL_MOD

spi_par->com_mod = DMA_TRANSFER;

 #else

spi_par->com_mod = FIFO_TRANSFER;

 #endif

spi_par->pause = 0;

spi_par->finish_intr = 1;

spi_par->deassert = 0;

……

>>>欢迎交流!











 

5.固件烧入

 当完成驱动挂载后即完成一个固件接下来介绍刻录固件的过程

1.)硬件环境

2)

USB烧录即可。

 

6.测试

6-1局域网测试

使用iperf测试即可:如下图所示

 


6-2访问公网测试

 8  公网测试

 

 

6-3视频测试

1080P 20帧:

 

需要相关资料请联系我:qq 441635295

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值