自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (8)
  • 收藏
  • 关注

原创 Linux USB Gadget驱动 part1数据传输

内核gadget驱动主要有两个作用,第一是实现真实usb从设备,常见的UAC、UVC、大容量存储设备等;第二是虚拟一些USB设备,例如Hub、光驱、键盘等。本文作为Linux USB Gadget驱动的第一篇,先介绍下如gadget驱动做简单的数据传输,顺便分析下udc驱动,以便于后面的上层驱动出现问题更好的定位问题。1、注册function 内核为了层次分明的描述一个复合设备(在同一个配置下,有多个interface,实现不同的功能即为复合设备,比如usb声卡有一个UAC...

2021-08-18 21:02:46 2298

原创 USB2.0基础知识总结

目录1、协议层:1.1、域分类1.2 、USB传输方式:1、协议层:域和包定义:包是一次传输的单位,每个包由多个域组成; USB中是按照LSB进行字节传输;1.1、域分类 1.1.1: 同步域(SYNC field) 所有的包都开始于同步域,在低速和全速通信中SYNC field用7个0和1个1来表示。 由于USB2.0使用了NRZI编码(0用翻转来表示,1用不翻转表示),所以00000001就是上图那样。...

2020-11-29 17:57:26 3626

原创 实现简单的内存管理

1 源码:源码已经提交github,内存管理github链接,欢迎一起讨论。2 实现过程该代码实现了在固定地址空间上进行内存的分配与释放。在操作系统启动时刻指定固定的地址作为mymlloc()操作的Heap空间,也可以直接定义数组。在嵌入式系统中,最好指定固定的地址,方便进行管理以及问题的排查。2.1 内存控制块定义struct free_block_t{ unsigned long size; unsigned char *start; unsigned char *en

2020-07-13 21:38:15 679

原创 linux驱动程序中设备树、device、driver之间的关系

linux驱动程序中设备树、device、driver之间的关系驱动程序的一般形式1、platform_driver2、platform_device驱动程序的一般形式下面是一个简单的驱动程序框架:#include <linux/fs.h>#include <linux/init.h>#include <linux/mm.h>#include &lt...

2020-03-29 15:44:02 3873

原创 zynq高速通信实例serdes

之前想要验证zynq通过serdes传输数据的实验,网上找了一篇文章,照着做了,没有一篇能完全实现,到了关键的地方都是一笔带过,大量的篇幅在讲DC平衡、高速信号产生串扰的原理,其实这些内容应该放在原理性的文章中。看到这种类型的文章,读者只想按部就班的把实验做出来。以下的内容就是基于这个思想的。1、vivado工程的创建:在ip Catalog 中找到如下图的IP,双击第一页的设置不要动,也动...

2019-12-28 15:10:01 1774

原创 神奇的e

开场之前一直写关于嵌入式linux和zynq的一些内容。这次打算加入DSP,这篇是一些基础知识,作为入门笔记。打算加下来从卷积、傅里叶、拉普拉斯、Z变换、离散傅里叶等来思考一些信号系统的知识。最后通过一些工程实例比如滤波器、PID控制器、调制解调器来应用下这些知识,这只是个开端。e的起源生活中经常会遇到这样一个问题,去银行存钱,银行会反着付给我们一些保管费,叫做利息。一般来讲银行说的利率是...

2019-12-28 14:26:45 696

原创 Power PC 与 zynq数据交互(基于LocalBus)

Power PC 与 zynq数据交互(基于LocalBus)1、 Power PC 地址空间映射:实现 Power PC LocalBus控制外部设备,首先要把Power PC的effective address 映射到 device address,这里需要搞清楚两个重要的概念:第一个是LAW,第二个是Power PC的内存管理单元MMU。Power PC为了实现灵活性,实现了地址空间的可...

2019-12-14 14:16:05 1989 2

原创 ZYNQ多个区域实现动态重配置(基于zc706开发板)

目标使用ZC706开发板上面的三个LED灯来做这个实验,完成一个静态区域控制LED0以1/4S的周期进行闪烁。两个动态区域实现LED2和LED3闪烁时间的动态配置。过程先看下ZC706 PL LED的电路原理图:LED这里只用到了三个,直接接到了PL上。再看下ZC706的时钟系统,主要目的是实现多块区域的重配置,因此选择一个最简单的全局时钟。这下好了,想着是用一个简单的时钟,可惜除...

2019-11-24 19:56:00 2333 10

原创 从FPGA视角来看DMA中断

题外话从学习一些高档的单片机就能看到DMA的作用。DMA可以让外设不经过CPU的干预,直接把数据搬运到内存。这样做不仅仅是体现在不需要CPU干涉,而且能够极大的提高外设数据的吞吐量。举个简单的例子,我们需要用AD转换器去采集50Hz的交流信号,假设采样率是1024次/T。那么需要的AD转换器的采样率是50*1024=51200。在非突发,并行采集的条件下,AD转换器每秒需要中断CPU 51200...

2019-11-09 15:47:10 3994 2

原创 AIX-stream FIFO 实现CPU与FPGA数据流交互

AIX-stream FIFO 实现CUP与FPGA数据流交互基于地址形式的交互与基于流形式的交互AXI-stream FIFO数据读写测试AXI-stream总线读写协议AXI-FIFO与CPU数据交互PS发送数据,PL读取实验基于地址形式的交互与基于流形式的交互上周许老师说,内容我看不太懂,但是你要认真写,不然别人看不明白还不如不写。看了下前面的确实很笼统,接下来按照许老师说的,认真写。...

2019-11-02 16:08:14 9026 3

原创 zynq pl i2c控制器驱动程序

明确一下关系:adapter--对应的是soc上实际的iic控制器;struct i2c_adapter {struct module *owner;              //所属模块unsigned int id;                //algorithm的类型,定义于i2c-id.h,unsigned int class;const struct i2...

2019-10-26 15:52:28 1277 1

原创 USB网卡驱动分析(rt8152)

USB网卡驱动分析(rt8152)USB设备驱动程序分析USB总线和USB设备USB设备匹配方式思考网络设备驱动程序分析网卡设备驱动分析USB+网卡驱动linux 源码中rt8152驱动程序分析总结USB设备驱动程序分析最近一直在搞zynq的PL部分,为了保持对驱动程序的敏感度,看着源码分析一下rt8152的驱动程序。之前学单片机一直想着给单片机装一个USB网卡,但是一直没有思路。今天突然想到...

2019-10-26 15:51:02 5648

原创 zynq实现动态加载(Partial Reconfiguration)

上周没有写博客,我不会无辜不写,只因为有更重要的事情。 首先说明下需求。在某些设计需求中,需要在更换bitstream时,要求一部分逻辑不能重新被加载。也就是说,要求实现FPGA的动态重配置。 这里主要参考了ug909,上面对每一步操作具有十分详细的说明。但是对于初学者来时,那些晦涩难懂的专业名词是在令人挠头,所以这里把手册的内容进行了精简,并且用大家最喜...

2019-10-13 21:08:17 3695 4

原创 zynq 实现液晶显示器显示(ADV7511)

首先来明确下设计结构,不管是用HDMI,VGA还是DP,最重要的过程是把帧缓冲中的RGB数据转换成显示扫描时序。显示扫描时序这个词并不存在于显示行业,只是我认为这样说能概括问题。 来解释下显示扫描时序。先说几个名词,之后会用上:1、像素时钟(CLK):屏幕上每个像素点显示动态显示都需要像素时钟来刷新;2、行同步时钟(HSYNC):当显示器显示一行像素的时间;3、...

2019-10-07 11:18:03 7390 3

原创 zynq7000之AXI-Lite

1、为什么写这个?今天是中秋节最后一天,放肆的玩了两天以后还是要努力工作的。作为底软开发人员,会在ARM侧操作FPGA的相关接口就够了。但是好奇心驱使我看了一天FPGA。2、这个东东有啥用?AXI总线在zynq7000系列SOC中用作PS(这不是photoshop)和PL之前通信(别的任何系列,任何东西,我都不知道)。这里只讨论AXI-Lite。字面上来看是轻量级的意思。本意也确实如此,它一...

2019-09-15 23:16:15 655

原创 linux网卡设备驱动(任意传输介质传输(与FPGA交互))

1 、底层数据分析最近由于公司项目需求,需要实现需要把网络数据包与DMA的交互,DMA后面连接的是FPGA,FPGA再和宽带收发器相连接。先不关心FPGA侧的数据过程,以后会专门来说。首先分析下体现在ARM侧的DMA数据流,(好吧,还得看下FPGA的部分结构,由于电脑没装vivado,用viso画个简单版本的,也便于专门搞ARM驱动的好理解)。第一幅是COPY Xilinx的,第二幅自己画的。...

2019-09-08 10:54:15 1039

原创 对linux用户空间DMA的分析(和单片机一样简单)

一般情况下,对外设的操作包括轮训方式、中断方式,对于数据量很大的情况会用到DMA操作。本文介绍一种在用户空间实现DMA操作的方法来获取AXI总线上的数据,FPGA部分暂时不详细说明,之后会有专题来介绍。首先要明白几个Linux的机制: 1、UIO机制,该机制可以在用户空间操作内核空间的IO设备,这里用来实现中断信号的上报。 2、/dev/mem ,该设备能够直接映射Linux物理内...

2019-08-18 16:47:59 2144

原创 lef文件的深入研究

先来解释一下名词,ELF的英文全称是Executable and Linkable Format。可执行和可链接的文件。 和elf文件对应的是bin文件,bin文件是直接加载到内存中执行的文件,用uboot直接把bin文件拷贝到bin文件的运行地址,(注意,一定要拷贝到运行地址)这时使用go命令就能够执行刚才拷贝的bin文件。elf文件需要用加载器进行加载,由于elf文件已经...

2019-08-18 11:14:54 5022 2

原创 vxvorks学习4(字符设备驱动)

1、VxWorks设备驱动结构首先在终端输入iosFdShow,此命令用来显示已经打开的设备信息。fd 是设备描述符,open函数返回以后供read, write等函数使用。name 设备的名字。drv 对应的驱动程序索引。在终端输入 devs:drv 对应上一幅图中的drv。name 设备名称。在终端输入iosDrvShow可以看到,该表通过drv索引到7个函数。以上...

2019-08-05 15:38:07 496

原创 linux 内核驱动一 字符驱动

linux 字符驱动是最基本的设备驱动程序,接下来的所有内容都会基于这个Demo,当然也会不断的修改其中的BUG。(早晨逛超市突然想出一句话,“看别人吃肉,自己在流口水的同时,也需要想想他是怎么捕猎的”)。开个玩笑。进入正题:#include <linux/module.h> /* 最基本的文件,支持动态添加和卸载模块 */#include <linux/fs.h&g...

2019-08-03 14:40:30 117

原创 使用(fmt,##args) 自定义日志

#define TEST_QUEUE_DEBUD#ifdef TEST_QUEUE_DEBUD #define LOG(fmt,args...) printk(fmt,##args)#else #define LOG(fmt,args...)#endif如上代码,在模块软件调试阶段,可以定义宏开关,等发布时,去掉即可。这里涉及到可变参数的问题下面举例来说明可变...

2019-08-02 11:00:05 3772

原创 再看"extern"

extern 主要有以下几种功能:1、作为函数和变量的外部申明,注意如果后面存在赋值动作,则变成定义。例如: int a; //definiction extern int a; //decreation extern int a = 10;//definition2、extern “C” 这是为了实现C++和C混合编程。C没有函数重载功能,但是C+...

2019-07-29 17:54:10 91

原创 vxvorks学习3(任务同步)

VxWorks任务间同步的机制以及通信方式概念普及:资源删除保护:进程A在拿到一个资源的信号量以后,进程A被删除,这时资源将不能被访问,因此需要对资源进行保护;优先级反转:有三个进程A,B,C。并且进程的优先级A>B>C,这时A在等待一个C掌握的资源,这时A因为等待资源而阻塞,C执行,但是C的优先级小于B,因此B开始执行。这时A为了等待资源,会等待B释放资源以后,C获取执行...

2019-07-25 14:58:10 385

原创 vxvorks学习2(双向链表和环形缓冲的使用)

双向链表1、 数据结构分析在litLib.h中定义了操作双向链表的基类typedef struct _Vx_node /* Node of a linked list. */ { struct _Vx_node *next; /* Points at the next node in the list */ struct _Vx_node *previous; /*...

2019-07-24 17:34:07 935

原创 vxvorks学习1(多任务实现)

多任务实例1、任务的创建int taskSpawn( char *name, //新任务的名字,储存在psTackBase int poiority, //任务优先级 int options; //任务选项 int stacrSize; //任务堆栈字节数 FUNCPTR e...

2019-07-24 11:19:42 470

原创 unix环境下串口接收数据(jni)

阻塞与非阻塞的概念当我们打开一个设备或者文件是,例如open(devname, O_RDWR | O_NONBLOCK),O_NONBLOCK代表以非阻塞的方式打开。对于读设备,一次读取动作就会读取当前缓冲区的数据,如果缓冲区没有数据,就返回0.不会等待读取指定的数据长度。对于写设备,如果写入的数据小于数据缓冲区,那么一次把数据写到缓冲区。如果数据大于缓冲区,写的动作会立马结束,但是数据会...

2019-07-21 15:59:41 128

原创 Android studio 3.4 使用JIN(JNI数据类型以及参数传递)

1、JNI数据类型以下是在Jni.h中定义的数据,这些是简单的数据类型 ,基本数据类型在Native层直接可以使用; #include <inttypes.h> /* C99 */ typedef uint8_t jboolean; /* unsigned 8 bits */ typedef int8_t jbyt...

2019-07-21 11:44:57 990

原创 Android studio 3.4 使用JIN(创建工程)

创建工程1 .创建一个新的工程:首选要保证集成开发环境已经安装了NDK和Cmake;2. 右键 src->New->Folder->JNI Folder ,这时就可以在main目录下生产一个JNI文件夹。3. 创建JNI类 在Mainactivity相同的目录下,创建一个类,在类中加入要实现的native方法;这个例子是java通过调用Linux库函数实现串口通信...

2019-07-20 16:44:35 1094

原创 生成FIT格式的系统镜像

什么是FIT格式?全称是flattened image tree uImage,为了更好的支持单个固件的通用性,类似于kernel device tree机制,uboot也需要对这种uImage固件进行支 持。FIT uImage中加入多个dtb文件,和ramdisak文件,当然如果需要的话,同样可以支持多个kernel文件。![uboot中对FIT格式的描述](https://img-blo...

2019-07-19 14:27:52 2248

原创 github使用总结

github使用总结1、使用git建立本地仓库设置自己的邮箱和用户名:git config --global user.name “你的名字” 。git config --global user.email “你的Email” 。git init 在需要管理的项目的目录中执行此命令;初始化完成以后,会在当前目录下生成一个.git目录,该目录存放所有资源。git add ...

2019-07-13 14:27:24 126

manual_fx_programming.pdf

FX 系列PLC变成手册

2020-08-05

ug908-vivado-programming-debugging.pdf

ug908-vivado-programming-debugging.pdf

2020-08-05

DS_FT232H.pdf

USB转JTAG

2020-08-05

基于vxworks的GoAhead开发.pdf

VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似MicrosoftVisual C,但是提供了更丰富的调试、仿真环境和工具。

2019-11-14

Simulink及基于模型设计的嵌入式应用_孙忠潇.ppt

Simulink及基于模型设计的嵌入式应用_孙忠潇 很不错的 ; MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

2019-11-14

《MATLAB的S-Function编写指导》.pdf

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。

2019-11-14

ros2中文指南.pdf

ros操作指南 ROS是机器人操作系统(Robot Operating System)的英文缩写。ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。它包含了大量工具软件、库代码和约定协议,旨在简化跨机器人平台创建复杂、鲁棒的机器人行为这一过程的难度与复杂度。ROS的原型源自斯坦福大学的STanford Artificial Intelligence Robot (STAIR) 和 Personal Robotics (PR)项目

2019-11-14

龙芯芯片技术白皮书-V9.pdf

龙芯技术手册,包含大量的设计实例; 控制台日志等级设置: 在linux系统系统中,调试信息的等级必须要大于控制台的等级,调试信息才能被显示出来。 一般情况下,通过修改 /proc/sys/kernel/printk 的值来设置控制或读取控制台日志级别。此文件包含四个数。当前日志级别,未明确指定消息级别时的默认消息级别,最小允许的的日志级别,引导时的日志级别。向该文件写入数值时,会修改当前日志级别。

2019-10-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除