版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2015。保留一切权商标声、注2015。保留一切权商标声、注前前言GMAC、USB2.0Host/USB3.0HostEMMC卡等驱动模块的前前言GMAC、USB2.0Host/USB3.0HostEMMC卡等驱动模块的i前言前言目目录GMAC操作指 目目录GMAC操作指 IPv6说 2USB2.0Host/USB3.0Host操作指 U盘操作示 2.4操作中需要注意的问 3EMMC卡操作指 4SATA操作指 5I2C操作指 I2C读写命令示 i目................................................................................................................................. 目................................................................................................................................. SPI读写命令示 内核态SPI读写程序示 用户态SPI读写程序示 7附 7.1用fdisk工具分 插图目图1-1插图目图1-1IPv6Protocol配置示意 1GMAC1GMAC操作指1.11GMAC1GMAC操作指1.1−TOE:insmod−TOE:insmodhitoe/stmmac.kohitoe=1tnk_threshold=0(TCPOffloadEngine-TCP卸载引擎)−CPUTCP/IP协议栈的处理,将协议处理过程放到高速设备上(包括TCP、IP、UDP、ICMP等)完成,即使用FPGA、ASIC等器件研制带有可提高主机CPU的工作效率。−Hi3536TOETCP协议上的数据传输进行ifconfigeth0xxx.xxx.xxx.xxxnetmaskxxx.xxx.xxx.xxxrouteadddefaultgwmountmount-tnfs-onolockxxx.xxx.xxx.xxx:/your/path/mount-前提是在servertftp服务软件在运行11GMAC−下载文件:tftprXX.fileserverip其中:XX.file为需1GMAC−下载文件:tftprXX.fileserverip其中:XX.file为需要下载的文件,serverip需要下载的文件所在的server−上传文件:tftp-lxx.fileremoteip1.2Hi3536GMACTOE发送数据时,需要大块连续的物理内存,但是内核echo8192>echo200>directoryi-node100,推荐设置内存使用。Hi3536ETH使用时如果网口出现内存分配不足的情况下可以在shellTOE不支持选择性重传功能,而内核默认打开了网络模块的选择性重传,为Hi3536在TOE模式下能与对端设备协商一致,需要关闭选择性重传echo0>补充说明:个数可以根据内存大小或应用场景配置。CPU压力越大,网络压力越即可,可以节省内存,配置范围256~8192。insmodstmmac.kohitoe=1目前默认每个socket都使能TOE。#defineSO_TOE_ENABLEintval=0;/*DISABLETOE:val=intlen=ENABLETOE:val=setsockopt(sockfd,SOL_SOCKET,SO_TOE_ENABLE,&val,21GMAC1GMAC#defineintintlen=getsockopt(sockfd,SOL_SOCKET,SO_TOE_STATE,&val,如果返回的val1,说tcp连接处于加速状态,如果返val0,说明tcp连接处于非加速状态。如果用户希望默认所有连接不开启TOE加速,仅当主动通过setsockopt设置某条连TOETOE/proc如果用户希望网口0默认所有连接不开启TOE加速,使用命令如下:echo0能某条socket进入TOE加速。1.3IPv6hisilicon$cdkernel/linux-hisilicon$cparch/arm/configs/hi3536_full_defconfig.confighisilicon$makeARCH=armCROSS_COMPILE=arm-hisivXXX-linux-menuconfigHi3536_V100R001C01SPCxxx对应uclibc,使用uclibc工具链时,CROSS_COMPILE=arm-Hi3536_V100R001C02SPCxxx对应glibc,使用glibc工具链时,CROSS_COMPILE=arm-进入如下目录,将该页面选项配置如1-1[*]Networkingsupport--->Networkingoptions---TheIPv6protocol---31GMAC1GMAChisilicon$ip-6addradd示例:ip6addradd2001:da8:207::9402/64devPing某个IPv6hisilicon$ping-6示例:ping642USB2.0Host/USB3.0Host 2USB2.0Host/USB3.0Host操作2USB2.0Host/USB3.0Host 2USB2.0Host/USB3.0Host操作指Hi3536USB2.0Host模式;USB3.0Host2.12.2或者键盘进行相关的操作了。具体操作请参见“2.3操作示例”。下面列出所有USB−−−−−−nls_iso8859-−52USB2.0Host/USB3.0Host−−−−evdev2USB2.0Host/USB3.0Host−−−−evdev−ohci-−ehci-−usb-−hiusb-hi3536USB3.0模块−ohci-−ehci-−xhci-−usb-−----UUSB2.0Host~#usb1-1:newhigh-speedUSBdevicescsi2:usb-storage1-1:1.0number7usinghiusb-scsi2:0:0:0:Direct-4KingstonDT1011.00PQ:0obytelogicalblocks:(7.74GB/7.21GiB)WriteProtectisoffWritecache:disabled,readcache:enabled,sda:sda1sd[sda]AttachedSCSIremovableUSB3.0Hostusb4-1:newSuperSpeedUSBdevicenumber2usingxhci-hcdscsi1:usb-storage4-1:1.0usbdev42->62USB2.0Host/USB3.0Hostscsi1:0:0:0:Direct-SanDisk0001PQ:0ANSI:(16.0GB/14.9[sda]2USB2.0Host/USB3.0Hostscsi1:0:0:0:Direct-SanDisk0001PQ:0ANSI:(16.0GB/14.9[sda]31277232512-bytelogicalAttachedscsigenericsg0typeorWriteProtectisoffModeSense:33000008Writecache:enabled,readenabled,sda:sda1sd[sda]AttachedSCSIudisk4110->udisk4110p1->sda2、sda3等字样。mkdosfssdXY:~$mkdosfsF32sdXY:~$mounttvfatdev/sda1区,请参见“7.1用fdisk工具分区”进行分区后,进入步骤2。若没有格式化,请参见“7.2mkdosfs工具格式化”进行格式化后,进入3若已格式化,进入3挂载目录,请参见“7.3挂载目录对硬盘进行读写操作,请参见“7.4读写文件----1.72USB2.0Host/USB3.0Host2.执行命令:catdev/2USB2.0Host/USB3.0Host2.执行命令:catdev/----gpm中提供的标准测试程序(mev)----2.4umount对键盘的操作只需要对/dev/input/下的event节点读取即可,而鼠标则需要标准的Linux系统中提供了一套标准的鼠标应用接口libgpm,如果需要使用鼠标客户可自行编译此库。在使用时建议使用内核标准接口gpm。83EMMC 3EMMC卡操作指3.1U-boot3EMMC 3EMMC卡操作指3.1U-bootLinux内核使用SDK发布的U-bootkernel文件系统再挂载到NFS。3.2系统进一步挂载到NFS。−−−−−−nls_iso8859-−nls_ascii−−−93EMMC3.具体操作请参见“3.3操作示例----3.3其中Xfdisk3EMMC3.具体操作请参见“3.3操作示例----3.3其中Xfdiskfdisk操作的具体目录需改为:~$fdiskmkdosfs工具格式化的具体目录需改为:~$mkdosfsF32挂载的具体目录需改为:~$mounttvfatdev/mmcblk0pX后,进入步骤2。若没有格式化,请参见“7.2mkdosfs工具格式化”进行格式化后,进入3若已格式化,进入3挂载目录,请参见“7.3挂载目录EMMC卡进行读写操作,请参见“7.4读写文件----3.4vfat文件系统(fdiskmkdosfs命令,具体过程参见“3.3操作示例要执行一次umount。操作。3EMMC作挂载目录的任务才能正常umount3EMMC作挂载目录的任务才能正常umount操作。4SATA操作4.1U-bootLinux内4SATA操作4.1U-bootLinux内核使用SDK发布的U-bootkernel文件系统再挂载到NFS。4.2系统进一步挂载到NFS。硬盘进行相关的操作。具体操作请参见“4.3操作示例”。−−−−−−−−−−−−----4.3其中X代表磁盘号,YsdX,示例:$−−----4.3其中X代表磁盘号,YsdX,示例:$fdiskdev/sda或者$partedmkdosfssdXY:~$mkdosfsF32sdXY,示例:$mounttvfat/dev/sda1区,请参见“7.1用fdisk工具分区”进行分区后,进入步骤2。若没有格式化,请参见“7.2mkdosfs工具格式化”进行格式化后,进入3若已格式化,进入3挂载目录,请参见“7.3挂载目录对硬盘进行读写操作,请参见“7.4读写文件----4.4port3,port认不使能。需要使用port2和port3时,执行如下配置步骤修改配置表格:−CRG0x200300AC(PERI_CRG43)的bit[6]0x0CMBPHY为SATA模式。−0x20120004(MISC_CTRL1)bit[12]0x0,设置CMBPHY的SATA功能使能。−CRG0x200300AC(PERI_CRG43)的bit[5]0x0CMBPHY的refclk为100MHz。−−CRG0x200300AC(PERI_CRG43)的bit[4]0x1CMBPHY的refclk的时钟门控。5I2C5I2C操作指5.1I2C的操作准备如下5I2C5I2C操作指5.1I2C的操作准备如下文件系统再挂载到NFS。5.2系统进一步挂载到NFS。以对挂载在I2C控制器上的外围设备进行读写操作。具体操作请参见“5.3操作示----~$i2c_read<i2c_num><device_addr><reg_addr><reg_width><data_width>5I2C~$i2c_read5I2C~$i2c_read00x720x80x80x1i2c_num:I2C控制器序号(对应《Hi3536H.265解码处理器用户指南》中的I2Creg_width:外围设备的寄存器位宽(Hi3536支持8/16bit)data_width:外围设备的数据位宽(Hi3536支持8/16bit)~$i2c_write<i2c_num><device_addr><reg_addr><value>~$i2c_write00x720x80xa50x1i2c_num:I2C控制器编号(对应《Hi3536H.265解码处理器用户指南》中的I2C控制器device_addr:外围设备地址(Hi3536的I2C控制器只支持7bit设备地址)reg_width:外围设备的寄存器位宽(Hi3536的I2C控制器支8/16bit)data_width:外围设备的数据位宽(Hi3536的I2C8/16bit)I2CI2Ci2c_adap:i2c_adap=假设我们已经知道新增的器件挂载在I2C0上,直接设置i2c_get_adapter0hi_client:hi_client=i2c_new_device(i2c_adap,hi_info结构体提供了I2Cret=i2c_master_send(client,buf,count);ret=i2c_master_recv(client,buf,5I2C参数client2得到的描述I2C外围设备的客户端结构体hi_client。参数buf为需要读写的寄存器和数据。参数count为buf5I2C参数client2得到的描述I2C外围设备的客户端结构体hi_client。参数buf为需要读写的寄存器和数据。参数count为buf内核态具体staticstructi2c_board_infohi_info=备地址是0x72I2C_BOARD_INFO("hi_test",staticstructi2c_clientstaticinti2c_drv_write(char*buf,unsignedintunsignedintreg_addr_num,unsigned{intret;structi2c_client*client=if(reg_addr_num==client->flags|=if(data_byte_num==client->flags|=ret=i2c_master_send(client,buf,count);returnret;}staticinti2c_drv_read(char*buf,unsignedintunsignedintreg_addr_num,unsignedint{5I2Cintstructi2c_client*client=if5I2Cintstructi2c_client*client=if(reg_addr_num==client->flags|=if(data_byte_num==client->flags|=ret=i2c_master_recv(client,buf,return}staticint{structi2c_adapter新增的外围设备挂载在编号为I2C控制器0上i2c_adap=地址是0x72,就组成了一个客户端hi_client。hi_client=i2c_new_device(i2c_adap,&hi_info);return}staticvoid{}打开I2C总线对应的设备文件,获取文件描述符:fd=open("/dev/i2c-2",5I2Cret=ioctl(fd,I2C_SLAVE_FORCE,ioctl(fd,I2C_16BIT_REG,0);ioctl(fd,I2C_16BIT_DATA,5I2Cret=ioctl(fd,I2C_SLAVE_FORCE,ioctl(fd,I2C_16BIT_REG,0);ioctl(fd,I2C_16BIT_DATA,read(fd,recvbuf,write(fd,buf,(reg_width+用户态具体SDK发布包中的i2c_opsosdrv/tools/board/reg-tools-reg_width=data_width=reg_step=HI_RETi2c_read(intargc,char*{intfd=-1;intret;unsignedinti2c_num,device_addr,reg_addr,chardata;charintmemset(recvbuf,0x0,fd=open("/dev/i2c-2",if{printf("Openi2cdeverror!\n");return-1;}ret=ioctl(fd,I2C_SLAVE_FORCE,if(reg_width==ret=ioctl(fd,I2C_16BIT_REG,ret=ioctl(fd,I2C_16BIT_REG,0);if(ret<0){5I2Creturn-}if(data_width==ret=ioctl(fd,I2C_16BIT_DATA,5I2Creturn-}if(data_width==ret=ioctl(fd,I2C_16BIT_DATA,ret=ioctl(fd,I2C_16BIT_DATA,0);if(ret<0){return-}for(cur_addr=reg_addr;cur_addr<reg_addr_endcur_addr+=reg_step){+if(reg_width2)cur_addr&0xff;(cur_addr>>8)&0xff;}===cur_addr&ret=if(ret<0)recvbuf,return-}if(data_width==2)data=recvbuf[0]|(recvbuf[1]}data=printf("0x%x0x%x\n",cur_addr,}return}HI_RETi2c_write(intargc,char*5I2C{intfd=-intret=0,index=unsignedint5I2C{intfd=-intret=0,index=unsignedinti2c_num,device_addr,reg_addr,reg_value;charbuf[4];fd=open("/dev/i2c-2",O_RDWR);if(fd<0){printf("Openi2cdeverror!\n");return-1;}ret=ioctl(fd,I2C_SLAVE_FORCE,if(reg_width==ret=ioctl(fd,I2C_16BIT_REG,ret=ioctl(fd,I2C_16BIT_REG,if(data_width==ret=ioctl(fd,I2C_16BIT_DATA,ret=ioctl(fd,I2C_16BIT_DATA,if(reg_width2)reg_addr&}else}==(reg_addr>>8)&=reg_addr&}else}==2)=reg_value&=(reg_value>>8)&=reg_value&5I2Cwrite(fd,buf,(reg_width+data_width));if(ret<0){5I2Cwrite(fd,buf,(reg_width+data_width));if(ret<0){return-}}----6.16.1文件系统再挂载到NFS。6.2一步挂载到NFS。----~$ssp_read<spi_num><csn><dev_addr><reg_addr>[num_reg][reg_width]]][]][~$ssp_read0x00x00x20x00x100x10x1csn:片选号(Hi3536的SPI控制01个片选、控制器13个片选)dev_width:外围设备地址位宽(支持8位reg_width:外围设备寄存器地址位宽(支持8位~$ssp_write<spi_num><csn><dev_addr><reg_addr><data>[dev_width][reg_width][data_width]1Byte0x65:~$ssp_write0x00x00x20x00x650x10x10、dev_width:外围设备地址位宽(支持8位reg_width:外围设备寄存器地址位宽(支持8位----hi_master=片选上描述SPI外围设备的结构体:sprintf(spi_name,"%s.%u",dev_name(&hi_master->dev),csn);d=bus_find_device_by_name(&spi_bus_type,NULL,spi_name);hi_spi=to_spi_device(d);spi_bus_type为核心层定义的描述spi总线的bus_type结构体类型变hi_spi为描述SPIspi_device参数t为描述传输一桢消息的spi_transferstatus=spi_async(spi,status=spi_sync(spi,spiSPI外围设备的spi_devicespi_async函数进行spi异步读写操作spi_sync函数进行spi同步读写操作程序可以参考SDK发布包中的sensor_spistaticunsignedbus_num=0;staticunsignedcsn=0;module_param(bus_num,uint,S_IRUGO);MODULE_PARM_DESC(bus_num,"spibusnumber");module_param(csn,uint,S_IRUGO);MODULE_PARM_DESC(csn,"chipselectstructstructintssp_write_alt(unsignedchardevaddr,unsignedcharaddr,unsignedchar{structstructintssp_write_alt(unsignedchardevaddr,unsignedcharaddr,unsignedchar{*master=*spi=structspi_messageunsignedcharstatusunsigned/*checkspi_messageisornofinishspin_lock_irqsave(&master-if(m.state!=NULL)return-EFAULT;}spin_unlock_irqrestore(&master-spi->mode=SPI_MODE_3|memset(buf,0,sizeof=&=====t.len=t.cs_change=t.bits_per_word=t.speed_hz=m.state=spi读写操作,由于是异步操作,因此该调用返回时,spi读写操作不一定完成,因spi_async的地址空间释放掉。status=spi_async(spi,return}int{chardevaddr,unsignedcharm.state=spi读写操作,由于是异步操作,因此该调用返回时,spi读写操作不一定完成,因spi_async的地址空间释放掉。status=spi_async(spi,return}int{chardevaddr,unsignedcharaddr,unsigned*master=*spi=structspi_messageunsignedcharstatus=/*spi_messageisornofinishspin_lock_irqsave(&master-if(m.state!=NULL)return-EFAULT;}spin_unlock_irqrestore(&master-spi->mode=SPI_MODE_3|memset(buf,0,sizeof=|=====t.len=t.cs_change=t.bits_per_word=t.speed_hz=//初始化化并设置SPI传输队列t.cs_change=t.bits_per_word=t.speed_hz=//初始化化并设置SPI传输队列m.state=spi读写操作,由于是异步操作,因此该调用返回时,spi读写操作不一定完成,因spi_async的地址空间释放掉。status=spi_async(spi,*data=buf[2];returnstatus;}externstructbus_typespistaticintinit{status=struct//通过spi控制器号得到描述spi控制器的结构体hi_masterspi_busnum_to_master(bus_num);if(hi_master){spi_name=kzalloc(strlen(dev_name(&hi_master->dev))if{status=-ENOMEM;+10//SPIspi_device的device成员的指针dbus_find_device_by_name(&spi_bus_typeNULLspi_name);if(d==NULL){status=-goto}hi_spi=to_spi_device(d);if(hi_spi==NULL){status=}hi_spi=to_spi_device(d);if(hi_spi==NULL){status=-ENXIO;gotoend2;}}elsestatus=-ENXIO;gotoend0;}status=0;return}fd=open("/dev/spidev0.0",value=SPI_MODE_3|ret=ioctl(fd,SPI_IOC_WR_MODE,SPI_LSB_FIRST表示SPI传输时每个数据的格式为大端结束态下使用该宏可包含SDK发布包中的osdrv/tools/board/reg-tools-1.0.0/include/common/hi_spi.h头文件。使用ioctl进行数据读写:ret=ioctl(fd,SPI_IOC_MESSAGE(1),使用ioctl进行数据读写:ret=ioctl(fd,SPI_IOC_MESSAGE(1),程序可以参考SDK发布包中的ssp_rw程序,具体路osdrv/tools/board/reg-tools-intsensor_write_register(unsignedint{intfd=-1;intret;unsignedunsignedunsignedfile_name[]=fd=open(file_name,0);if(fd<0){return-}sizeof&0xff00)>>=&==addr&=memset(mesg,0,sizeofmesg[0].tx_buf=mesg[0].rx_buf=mesg[0].len=((=mesg[0].bits_per_word=mesg[0].cs_change=value=SPI_MODE_3|ret=ioctl(fd,SPI_IOC_WR_MODE,&value);if(ret<0){return-}ret=ioctl(fd,SPI_IOC_MESSAGE(1),mesg);if(ret!=mesg[0].len){return-ret=ioctl(fd,SPI_IOC_WR_MODE,&value);if(ret<0){return-}ret=ioctl(fd,SPI_IOC_MESSAGE(1),mesg);if(ret!=mesg[0].len){return-}return0;}{intfd=-1;intret=unsignedstructspi_ioc_transferunsignedcharunsignedcharfile_name[]=fd=open(file_name,0);if(fd<0){return-}memset(tx_buf,0,sizeofmemset(rx_buf,0,sizeof=(addr&0xff00)>>|==addr&=memset(mesg,0,sizeofmesg[0].tx_buf=mesg[0].rx_buf=mesg[0].len=((=mesg[0].bits_per_word=mesg[0].cs_change=value=SPI_MODE_3|ret=ioctl(fd,value=SPI_MODE_3|ret=io
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 在操场上玩一玩(说课稿)-2024-2025学年一年级上册数学人教版
- 校园心理健康合同:校园心理健康服务承包协议
- 新疆维吾尔自治区劳动合同范本样本
- 山林承包合同使用指南
- 2024年范文生态园土地承包合同
- 2024试析《物业服务合同》的解除或终止问题
- 2024小吃加盟合同范本
- 物业管理服务协议参考样本
- 个人建房施工合同范本
- 2024广告设计类合同范本
- 期刊编辑的学术期刊编辑规范考核试卷
- T-CCSAS014-2022《化工企业承包商安全管理指南》
- 电梯安全总监和安全员的任命文件
- SL-T+62-2020水工建筑物水泥灌浆施工技术规范
- 2024年安徽省普通高中学业水平选择性考试 历史试卷
- 电子商务师职业技能等级证书培训方案
- JBT 14615-2024 内燃机 活塞运动组件 清洁度限值及测定方法(正式版)
- DL5009.2-2013电力建设安全工作规程第2部分:电力线路
- 理智与情感:爱情的心理文化之旅智慧树知到期末考试答案章节答案2024年昆明理工大学
- GA/T 2097-2023执法办案管理场所信息应用技术要求
- GB 20052-2024电力变压器能效限定值及能效等级
评论
0/150
提交评论