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在这个应用上,相当于一个转接芯片,架构为:监控摄像头 DM9051NP—SPI接口--移远EC200T(ASR1802)。
B:由于4G模块的应用普及,不仅是Cat4,当前火热的Cat1在各行业的应用,如CPE、POS机、智能监控、环境管理或充电桩等,相关应用需要有线以太网口,将数据上传到远程后台,进行远程控制等,都可以采用此相同作法。
1.方案介绍
1-1. 4G模块介绍
此4G模块是上海移远通信EC200T,是一款LTE Cat 4 通信模块,支持最大下行速率150 Mbps和最大上行速率 50 Mbps,EC200T内置丰富的网络协议,集成多个工业标准接口,拓展了其在M2M(机器对机器)通信的应用范围,如安防监控摄像头、 OTT、CPE、路由器、数据卡、平板电脑以及工业级 PDA 等。
上海移远通信EC200T使用到上海翱捷科技ASR1802,ASR1802为所有竞品中系统最小,采用RTOS与Linux操作系统,采用ASR1802芯片的宽带MiFi终端已经销售到全球各运营商,并获得运营商认证,如中国CMCC,韩国SKK,日本,东南亚,印度Airtel,俄罗斯Beeline,非洲MTN等。
1-2. DM9051NP网卡芯片介绍
DM9051NP SPI接口网卡芯片是为了方便互联网行业进行以太网通信而开发出的解决方案。DM9051NP芯片是带有行业标准串列外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器。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监控摄像头:
硬件架构:摄像头ß à DM9051NP—SPI接口--移远EC200T(ASR1802) ß à 4G
2-2. Cat.1 +有线以太网口应用:
其他应用DM9051NP—SPI接口—ASR3601/春藤8910DM
3-1 .硬件环境
DM9051NP通过SPI接口控制内部寄存器,并有中断输出接口。EC200T(ASR1802)通过SPI1和DM9051NP相连。具体接口如下:
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个引脚与外部器件相连:
- MISO : 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
- MOSI : 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
- SCK : 串口时钟,作为主设备的输出,从设备的输入
- NSS : 从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
4.软件部分
4-1.引言
以DM9051在ASR1802 Linux上导入为例,在Linux核心添加 DM9051驱动,DM9051为SPI接口,需具体实现SPI传输功能,DM9051网络数据包送收程序,及依据SPI master特性而扩增的DMA传输模式设置。
因为要采用DTS与DMA模式,除了要进行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_SUPPORTdb->rcr_all= RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN | RCR_DIS_WATCHDOG_TIMER;#elsedb->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 counterint_reg_stop(db);……
>>> 欢迎交流!
4-3设备树DTS (Device tree source)
- 基本概念:在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.
- 在我们在进行DM9051NP驱动调试之前,要先进行DM9051NP 驱动的DTS参数设置,让CPU SPI master能够对应DM9051NP的设置,操作指南如下:
- DM9051NP驱动参数设置 : 依照开发者的需求,写入conf_ver.h来设置DM9051NP驱动(建议:只编辑conf_verh)
- 为了完善源代码架构,请在conf_verh添加下列函数:
#define DM_CONF_APPSRC
#define DM_CONF_DBGSRC
- #define DM_CONF_DTSSRC 創建一個软件模块(dm9051.ko),请在conf_verh添加下列函数:
- #define DM_CONF_MODULE 當對驅動进行设置时,添加DM_CONF_PHYPOLL是很重要的:
#define DM_CONF_PHYPOLL
- 当使用DTS设备树时,请在conf_verh添加下列函数
#define DTS_CONF_YES
说明:在你的DTS描述符中,请定义
1.)最高SPI时钟速度。
2.)中断模式与中断IRQ号。
3.)中断主动极性。
4.)SPI bus_num以及 SPI片选(有需要才设置)
- 如果不使用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最高速度是多少*/#elsedb->spidev->max_speed_hz= dm9051_spi_board_devs[0].max_speed_hz;#endif#if DM_DM_CONF_RARE_PROJECTS_DTS_USAGE/*当处于DTS模式时,请在DTS文件中定义SPI最高速度是多少*/#elsedb->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;}#endif4.)再查看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_MODspi_par->com_mod = DMA_TRANSFER;#elsespi_par->com_mod = FIFO_TRANSFER;#endifspi_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
DM9051_SPI网卡驱动于EC200T 4G模块有线网口驱动添加指导相关推荐
- rndis模块 linux,【填坑求精】荔枝派rndis-host驱动合宙4G模块,荔枝派插入WIN/Unbutu识别为Rndis网卡...
# # 拔掉模块 # # [ 1059.077876] usb 1-1: USB disconnect, device number 3 [ 1059.083457] rndis_host 1 ...
- ubuntu加载4G模块驱动的调试过程记录
一个工业平板电脑,原本安装的是win7系统,希望改用ubuntu系统.其他的驱动都好说,关键是有个4G模块,平板电脑厂家使用的是一个小品牌的,ubuntu内部没有集成驱动,需要自己编译驱动.这个对li ...
- sim7600ce 拨号上网测试_树莓派系列教程:通过SIM7600 4G模块NDIS拨号
1.说明 本章将介绍Raspberry Pi如何采用SIM7600 4G模块进行无线上网,并描述其相关细节,本文先讲解NDIS拨号. 2.采用4G模块的上网方式有哪些? Raspberry Pi通过S ...
- 在tiny210上移植华为4G模块 me909s-821
最近做毕设需要一个终端将解算数据发送到服务器,一开始想到了用4G串口透传模块,但是考虑到串口通信速度慢,而且在linux C编程时还要单独的写AT指令,感觉麻烦,所以放弃. 4G模块:华为me909s ...
- 迅为干货 | Linux系统移远EC20 4G模块移植方法
硬件平台:迅为i.MX6Q开发板 1. 4G网络连接 对于嵌入式Linux而言,4G网络连接是一个比较容易实现的功能,大多数的4G模块接口都是MiniPCIE接口,但是深入了解一下就会发现,4G模块的 ...
- 华为4g模块 linux驱动程序,定制Android之4G-LTE模块驱动
定制Android之4G-LTE模块驱动 一. 简介 本文讲述在Android内核中,添加中国移动4G-LTE制式华为MU909模块驱动,实现通过4G上网业务,电话业务,短信业务. CP ...
- OpenWRT安装SIM7600CE 4G模块驱动
SIM7600CE4G模块的驱动与Linux内核有着很大的关系,Openwrt18.06系统测试的稍微有些Bug,19.07版本兼容性能比较好. 1.添加simcom_wwan文件 将附件中的simc ...
- 树莓派搭载EC200U 4G模块(USB网卡上网和PPP拨号上网)
文章目录 一.EC200U模块4G模块介绍 二.USB转串口驱动设置 (1)打开树莓派的串口 (2)lsusb是否有EC200U模块 (3)添加 VID 和 PID 信息 三.USB网卡驱动上网 四. ...
- 4G模块 EC20 R2.0 USB Serial/GobiNet/QMI WWAN 驱动移植过程
4G模块 EC20 R2.0 USB Serial/GobiNet/QMI WWAN 驱动移植过程 一.开发环境 二.确定 EC20 R2.0 的基本信息 三.USB Serial 驱动移植 opti ...
最新文章
- “cannot find module ‘npmlog’….”的错误
- Python 骚操作,微信远程控制电脑
- matlab中数值的取整、四舍五入、文本输出
- API文档工具-Swagger的集成
- OpenSessionInViewFilter 对 lazy 加载 的配置及作用
- 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-9825】-【V4.0 Android-Q-TD1】...
- layui 表单样式无效
- Google 工作十年后,我选择离开!
- 读书 曾国藩(最新图文版)
- 实验九 vlan间路由实验
- erdas2015几何校正模块在哪_几何校正和正射校正,怎样用erdas做几何校正?
- rovio论文解读,及工程应用经验总结
- 人生有三重境界:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水
- 在腾讯云部署一个自己的网站 问题总结
- php 锁屏,windows锁屏快捷键是什么
- 最优灵活体系结构(Optimal Flexible Architecture,OFA)
- SEC S3C2410X Test B/D 驱动安装
- Java实现 LeetCode 400 第N个数字
- POJ 4113:北京地铁票价-BeiJing Subway
- [Python] 一行代码让你明白什么叫艺术