自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 HID USB设备数据发送不完整

一般是初次尝试会遇到,使用官方库没问题,自己一改出问题了,原因在与报告描述符中规定了发送数据的范围及内容。超出范围就会导致明明发了但是收不到,只有bus hound能捕捉到。解决办法:把范围扩大即可。右侧红圈改为 上80 下7f就将发送的数据范围扩大到了-128~127....

2022-06-22 15:38:24 2220

原创 高速电路中的电源设计(一)

与电源相关的经典案例案例4-1 LDO输出电源电平低于设置值某单板利用Linear公司的LDO芯片LT1086-ADJ,从3.3v电源产生2.5v电源,测试时发现输出电源的电压只有2.3V。所有设计都没有问题按照公式计算完全正常。问题出在LDO都有一个输入输出最小压差的要求,此芯片要求压差为1V,因此最大输出为2.3V解决办法:使用支持低压差的芯片。以后注意:散热、压差、纹波、滤波电容选择(容值、器件类型)案例4-2 电源芯片欠压保护电路导致上电时序不满足设计图中要求1.2V在1.8V之后5

2021-03-31 22:07:46 2813 1

原创 第三章 高速电路逻辑器件选型及高速逻辑电平应用

案例 3-5LVDS电平的端口空闲上下拉电阻引线过长,如果附近有干扰源,则会产生超过阈值电平的有效摆幅,对芯片产生逻辑干扰。解决方法:删除上下拉走线、或者在FPGA芯片内部关闭空闲端口讨论:使用CMOS或者TTL等单端电平不至于对LVDS等差分信号电平造成干扰。但是此种共模噪声在差分线上会产生EMI辐射,造成电磁环境干扰。解决办法:增加两种信号线之间的距离。使用低驱动能力的单端信号电平或将端口设置为弱电流输出LVDS端口保护1.端接100Ω电阻保护2.使用专门的保护电路,例如端接电阻及上下偏置

2021-03-17 16:01:54 2464

原创 第二章 阻容感磁珠选型及应用--- 电阻电容

电阻的选型及应用串联电阻过大,导致板与板之间信号质量下降在多板协同设计的时候板与输出接口会串联电阻以确保热插拔,但是电阻串联过大的时候就会出现高低电平超出门限电阻额定功率过小导致单板存在缺陷,在全速长时间工作的时候,电阻会出现爆裂串联1Ω电阻用于全频段抑制噪声,但是在电流较大的时候,电阻的发热功率增加,导致超出散热极限,发生爆裂。兼容两种时序(走线长度)的设计使用焊接或者不焊接以及0Ω电阻的方式对走线进行片选,需要注意PCB布线不能有天线出现4.电阻的应用要点阻值尺寸额定功率精度

2021-02-11 00:48:03 1046 9

原创 cubuide RS485问题排查

无法发送无法接收:修改printf函数,让数据可以发送定位到指定串口int __io_putchar(int ch){ RS485A_sen(); if (ch == '\n') { uint8_t enter = '\r'; if ((HAL_UART_Transmit(&huart1, &enter, 1, 5000)) != HAL_OK) { RS485A_rec(); return -1; } } if ((HAL_UART_Tra

2021-01-24 13:51:31 126

原创 9. 电磁干扰

影响集成电路EMC的因素设计者要在开始设计的时候就要考虑EMC而不是在设计快结束的时候再开率噪声源:电源和地线中的电流、时钟晶振或者RC时钟、时钟电路、输出信号、开关噪声、存储器信号线高压发射多、低压受干扰严重,高频发射多、接地不充分导致收到干扰三种办法移植干扰,源头,传播途径,敏感元件展频时钟技术:针对时钟信号在fft后频域的能量进行调制,扩频,降低单频率的能量密度,从而减少EMI。一般频率范围选择的是30-90khz,该方法还可以有效提高系统之间通信的阻抗匹配兼容性。差分时钟,类比差分信号

2020-12-28 21:21:09 217

原创 8.消抖技术

简介开关的金属触点在断开闭合的过程中产生了多个信号,消抖就是保证只有一个信号起到作用。这样的小抖动不像快脉冲一样造成市电上的其他设备出现故障。但是会导致模拟电路快速翻转的数字信号电路出现故障。便宜的电脑键盘通常使用导电橡胶制成的薄膜触点,软橡胶和金属触点接触后,橡胶起到接触缓冲,因而不会出现抖动信号,这是硬件机械消抖的一个例子。RC消抖最常见最容易实现的消抖电路,电阻电容串起来并联到开关上起到缓解电压变换的作用。下图电路容易出现一个问题,就是快速开关的时候可能误以为是抖动而消除,导致开关不.

2020-12-28 20:43:20 1549

原创 7.字节处理顺序

字节处理顺序主要指的是针对数据长度和操作系统位宽不一致的解决办法大端模式和小端模式大端模式就是指高位数据(大权值的数据)存储在存储区域的起始端位置大端模式就是指低位数据(小权值的数据)存储在存储区域的起始端位置优劣比较:大端模式进制转换、和显存更有效,小端模式的多精度计算更有效不同电脑的字节顺序比较表格处理器字节顺序体系结构ARM双字节(大端小端可变)POWER_PC双字节(大端小端可变)X86小端模式常用文件及其字节顺序表格文件格式.

2020-12-28 19:57:16 122

原创 使用python 识别图像文字,快速读取数据

安装opencvpip install opencv-python安装tesseract 使用pip install pytesseract开启摄像头,实现每秒钟采集一次读取图片数字,实现文字分隔,两类数据

2020-12-28 19:27:09 397 1

原创 python ocr识别调用pytesseract的时候出现如下故障

Traceback (most recent call last): File "D:\software\pythonenvironment\venv0\lib\site-packages\pytesseract\pytesseract.py", line 255, in run_tesseract proc = subprocess.Popen(cmd_args, **subprocess_args()) File "D:\software\python3.7\lib\subprocess

2020-12-27 19:46:48 1434

原创 Python下使用opencv调用摄像头出错

[ WARN:0] global D:\Build\OpenCV\opencv-4.4.0\modules\videoio\src\cap_msmf.cpp (373) `anonymous-namespace'::SourceReaderCB::OnReadSample videoio(MSMF): OnReadSample() is called with error status: -2147024809 [ WARN:0] global D:\Build\OpenCV\opencv-4.4.0

2020-12-27 17:46:34 29177 17

原创 6.流水线的艺术

简述总的来说思路就是,一级电路处理a1,交给二级电路,在二级电路处理a1的时候,一级电路处理a2,也就是电路时钟处于工作状态,而不用等待最后一级输出a1之后再处理a2。DLX指令集的实现指令集主要分为5个部分,:指令获取(IF)指令解码、寄存器获取(ID)执行、有效地址周期(EX)访问存储器、分支完成周期(MEM)写会周期(WB)使用多周期流水线实现上述指令集需要9个周期就可以执行5条指令,单周期操作5个指令则需要25个周期,性能提升了2.8倍流水线注意事项所有共享一条流水线的指

2020-12-27 15:51:45 171

原创 5 低功耗设计

5.2 功耗源浪涌、静态功耗、动态功耗 是三个主要的功耗源。浪涌电流指的是期间上电的时候产生的最大输入电流,也称之为启动电流。电机的启动电流是正常满载电流的数倍。基于SRAM 的FPGA浪涌电流也很大,因为其初始状态是空白的或者可以理解为复位导通状态,加载配置连接之后就恢复长长电流待机电流、晶体管漏电流、电容漏电流也就是静态功耗动态功耗是由逻辑切换的时候造成的额外输出功耗...

2020-12-27 15:13:30 153

原创 wps表格如何隔行删除

EXCEL利用空值定位功能可以实现隔行删除的操作,但是在wps中按下F5什么反应都没有。是不是没法实现了呢?当然不是!###实现流程打开数据在数据右边放上一串数字 0 1 0 1 0 1 0 1……(按照间隔行数可以自己发挥,也可以使用公式计算做一些加倍之类的操作)这个如下实现:2.1. 先间隔输入02.2. 然后间隔输入12.3. 然后按行合并点击筛选, 选择0,删除所有0取消筛选,完成!...

2020-12-25 16:23:01 2269

原创 如何打开afm导出的ibw文件并且转换为png

首先记录下开源软件的地址:http://gwyddion.net/download.php各种版本都有,fedora、ubuntu、windows等等各类操作系统都可以,本文安装的是64 位windows系统版本打开软件打开文件点击file,saveas修改后缀为png点击save确认导出参数没问题之后点击ok导出成功!!...

2020-12-24 15:59:01 5939 6

原创 4.时钟分频器

介绍芯片中常常使用不同类型的时钟分频技术。我们常常想到的是以主时钟2的幂次倍数来分频,比如2分,4分,8分等等。但是有时候也会用到奇数分频甚至小数分频。下面介绍的分频技术比常见的pll备品得到的目标时钟更有效、便宜、快速同步整数分频器MOORE状态机,实现整数分频,但是这种简单的逻辑无法产生50%的占空比输出具有50%占空比的奇数整数分频使用两个具有正交相位差的频率为期望频率一半的时钟相互异或,即可得到。非整数分频1.5倍分频,使用一个3分频电路和一个多路器,对输出进行开关叠加处理,单后

2020-12-17 22:07:02 1242

原创 3.7 使用FIFO传输数据

FIFO 先进先出队列(此处指硬件结构)同步FIFO架构结构如下图所示工作方式:复位后读写指针相等且都为空,此时FIFO为空,阻值对其的读操作,只可以写。当没有空间可以写的时候指针位置为SIZE-1,此时进行一个写操作会使得指针回滚到0,读写指针再次相等。空和满状态的区分:一种是使用进入空和进入满的状态逻辑先后进行判断。另一种是使用计数器做计算,这种方法容易理解但是效率低。异步FIFO异步FIFO可以使用同样的逻辑,但是需要注意亚稳态的规避。使用格雷码取代二进制计数器作为读写指针同步.

2020-12-17 11:48:22 664 1

原创 3.6握手信号方法

握手是最古老的子不同域之间传输数据的方式握手信号的传输步骤A给B发送数据的同时发送请求reqB根据自己的下一个时钟上升沿同步req成为req1B根据自己的下一个时钟上升沿识别req1成为req2(判断是否发送终止)B发送ack给A,表示已经接收到数据A根据自己的下一个时钟上升沿同步ack成为ack1A根据自己的下一个时钟上升沿识别ack成为ack2重复上述操作发送一个数据需要使用5个A周期握手信号的要求数据应该在发送时钟域内稳定至少两个时钟上升沿请求信号req的宽度应该超过两.

2020-12-17 11:16:13 1409

原创 3.5跨时钟域

有如下几种时钟同频零相位差时钟同频恒定相位差时钟非同频可变相位差时钟整数倍时钟有理数倍时钟3.5.1 同频零相位差时钟本质上就是单时钟设计,凑字数的3.5.2 同频恒定相位差时钟相移T/4周期的则只有3T/4时间用于数据捕获,也就是意味着需要更小的建立保持时间,如果可以满足就不需要使用同步器,直接在设计中考虑好建立保持时间即可。3.5.3 非同频可变相位差时钟整数倍的时钟:快时钟发送慢时钟接收,快时钟域输出的数据至少保持一个慢时钟的周期(可使用有限状态机FSM来实现)。慢时钟.

2020-12-17 10:57:34 85

原创 3.处理多个时钟

很少有芯片设计时单时钟域的,多时钟域中可能有频率不同或频率相同但是相位不同的时钟共同存在。这就会遇到建立时间&保持时间不足进而导致亚稳态的问题。建立时间:时钟脉冲达到前,输入数据需要保持稳定的时间保持时间:时钟脉冲到达后,输入数据需要保持稳定的时间多时钟设计的处理技术主要有两种方法或者规则:时钟命名规则,分模块设计命名规则参考程序设计里面的驼峰命名法分模块设计1)每个模块应当只在一个时钟下工作2)信号夸时钟域传播的时候使用同步器模块3)同步器模块的规模尽可能小跨时钟域.

2020-12-15 23:15:31 209

原创 2.7 控制时钟偏移

整个芯片中时钟信号到达各级电路的时间差即为时钟偏移短路径问题:即逻辑单元速度快,输出数据比时钟传播到下个逻辑单元还要快,就会造成数据丢失逻辑功能出错。解决方法:人为添加布线延迟,pcb上即是等长绕线。时钟反转,在发送寄存器上使用加了传输门的时钟,在接收寄存器上直接使用时钟,使得后者更早触发。对于约翰逊计数器和现行反馈以为寄存拿起没有作用交替使用一个时钟不同沿或者交替使用不同相位的时钟行波时钟结构,每一个触发器的输出驱动下一个触发器的时钟平衡线路长度,也就是布线等长...

2020-12-15 22:52:24 370

原创 数字电路的设计方法与技术 2.6 复位信号的设计策略

asic设计的时候,芯片都需要使用复位信号。复位有同步复位、异步复位两种分各种情况而定,一般来说所有的寄存器都需要提供复位信号,以确保开始工作的时候系统处于一个确定的状态。但是移位寄存器这一类在某些高速信号电路中使用的时候需要去掉复位信号以获得最佳性能。1 同步复位设计由于复位树的高扇出,导致复位带载功率大,复位信号上升沿相对来说较为缓慢,对于时钟信号来说属于一个迟到的信号,即使经过缓冲区缓冲,也要尽可能减少中间逻辑数量。同步复位的优点:同步复位一般能确保电路是100%复位综合的时候效率更.

2020-11-29 21:02:19 406

原创 数字电路设计方法与技术--2.5门控时钟方法学

读书笔记本节小叙:常规设计中,时钟功耗主要有三个部分组成:在每个时钟沿变化的组合逻辑所产生的功耗触发器所产生的功耗时钟树产生的功耗时钟树功耗接近整个芯片的50%,因此做好时钟在时钟树的根部对时钟进行开关。一 不含锁存器的门控时钟电路使用一个简单的逻辑门进行判断,例如与门或者或门,上升沿使用与门,下降沿使用或门为了避免过早停止或者产生多个时钟脉冲(或者时钟上的毛刺),需要在时钟活跃沿到时钟不活跃沿之间一直保持不变。二 基于锁存器的门控时钟...

2020-11-29 18:53:01 370

原创 vs 2017 编译C#一直处于正在启动生成 解决办法

vs 2017 编译C#一直处于正在启动生成 解决办法出现这种现象前我干了什么:搭建了远程调试远程调试不用了,我把配置一步一步改回原来的样子卡死我做了哪些处理:清理解决方案重新生成解决方案重启vsBUT还是不行最终解决办法:修改输出debug为release然后再改回来,一切解决,判断是vs出现的一个配置刷新bug,切换一下输出方式就会自动刷新最新配置...

2020-11-05 11:46:09 3686 1

原创 arm linux内核5.9.1源码的编译步骤 使用arm-linux-gnueabi-gcc 10.1.0

内核源码的编译步骤:获取源码https://www.kernel.org/在上面有一个大大的下载按钮,网速没问题的话基本上十几秒就下载下来了设置交叉编译工具:在makefile中195,196行修改平台为arm以及交叉工具为arm-none-linux-gnueabi-这里使用的是ARM的32位处理器,因此选择这中交叉编译工具选择当前的soc,使用make xxxxconfig,生成.config文件make menuconfigmake zImage或uImage...

2020-11-02 23:05:59 950

原创 arm linux 信号

信号信号可工作在单个进程和多个进程中,用于处理异步事件。主要包含两个 :alarm (用于产生闹钟信号)及signal (处理各类信号,包括但不限闹钟信号)alarm:闹钟,参数是时间,成功返回0或剩余时间,错误返回-1usigned int alarm(unsigned int seconds);signal:参数signum为等待的信号,handler为触发处理方式,类似中断处理函数,成功返回0,错误返回-1sighandler_t signal(int signum,sighand

2020-11-02 22:02:02 240 1

原创 linux 编程 消息队列的消息写入和读取

消息队列主要用到两种函数,写入和读取:接收函数:ssize_t msgrcv(int msqid,void *msgp,size_t msgsz,long msgtyp,int msgflg)/*其中:msqid:消息队列的标识码,queen 队列id就是identity 身份msgp:指向消息缓冲区的指针pointermsgsz:消息的长短sizemsgtyp:等于0则返回队列最早的一个消息,大于0则返回类型为mtype的一个消息,小于0则返回其类型小于或等于mtype参数的绝对值的最小的

2020-10-18 22:28:57 904

原创 linux 进程通信种类及无名管道

linux进程之间通信有如下几种方式:无名管道有名管道消息队列信号信号量共享内存socket无名管道类似于硬件中的串口,但是只能是半双工的方式而且只可以存在于子进程和父进程之间。两个函数:pipe,pipe2 which used to create pipe int pipe(int pipefd[2]);pipe2 has more flags in functionpipefd[0]:用于读管道pipefd[1]:用于写管道成功后返回0;失败返回-1;下面

2020-10-07 16:32:10 65

原创 linux fork创建新进程

man 2 fork使用fork创建和当前进程一模一样的进程,叫子进程原来的进程叫父进程pid_t fork(void);无输入参数,执行成功后返回子进程pid给父进程,返回0 给子进程,当内存不够或者pid号用尽的时候执行失败,此时返回-1一些提示点(来自man): * The child has its own unique process ID, and this PID does not match the ID of any existing process group (setp

2020-10-07 15:43:59 118

原创 linux exec函数组 多个程序相互调用

man 3 exec查看exec系列函数本质上这些函数就是在本程序里调用其他程序,让其他程序开始执行,性质有点类似脚本 ./bin/xxx下面是这些函数int execl();int execlp();int execle();int execv();int execvp();int execvpe();上述函数中l和v表示参数是以列表list或者是数组(arry,这里布置到为什么用v)的形式提供的p表示函数第一个参数是*path路径,输入绝对路径。而不含p的函数可以是相对路径也

2020-10-07 14:48:01 317

原创 在ubuntu和开发板之间搭建NFS服务器用于共享数据(遇到一些问题始终无法启动nfs文件系统)

NFS服务器NFS(NetworkFileSystem)基于UDP协议进行传输的应用。主要目的是用来传数据,就像windows的共享文件夹一样。可以提高开饭嵌入式的效率。最小linux系统或较小的系统比较适合用NFS来调试。安装NFS服务apt install nfs-kernel-server配置/etc/pxports文件,在最后一行添加(注意空格)/home/minilinux/ *(rw,sync,no_root_squash)重启两个服务/etc/init.d/rpc

2020-10-07 14:13:50 619

原创 linux 查看当前进程ID及父进程ID

两个函数 在man 2里可以查到getpid及getppid分别是查看进程id和父进程id用法如下:#include <stdio.h>#include <sys/types.h>#include <unistd.h>void main(){ pid_t idp,id; idp = getppid(); printf("ppid= %d\n",idp); id = getpid(); printf("pid= %d\n

2020-10-07 14:12:03 3945

原创 linux stat 函数组 stat fstat lstat 打印文件及目录相关基础信息

stat结构体定义如下: struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* Inode number */ mode_t st_mode; /* File type and mode */ nlink_t st_nlink; /* Number of har

2020-10-06 21:03:50 168

原创 在windows上配置vs code编译调试c/c++

在知乎上看到一位前辈编写了一个配置工具,直接配置编译调试环境,用起来十分舒心,这是他的GitHub下载链接,下载安装一条龙https://guyutongxue.github.io/VSCodeConfigHelper/

2020-10-04 21:59:18 641

原创 linux man命令及其分页规律

有8个分页man1:一般命令,常见的linux命令,例如ls cd cat pwd shutdown reboot等等man2: 内核提供的系统调用或者函数,例如forkman3:c语言库函数 例如printf之类的man4:特殊文件例如设备和驱动程序man5:文件格式,文件配置,网络列表,可用的shell列表man6:游戏和屏幕保护程序man7:杂类文件man8:系统管理命令其中每查找一个函数,就回给出如下命令介绍– name(名称)给出命令、函数或文件格式的名称,以及对软件作用的单

2020-09-30 10:11:46 402

原创 arm_linux利用较高精度的时间函数来测试代码运行时间

代码如下:#include <stdio.h>#include <sys/time.h>void function(){ unsigned int i,j; double y; for (i=0;i<1000;i++) for (j=0;j<1000;j++) y=i/(j+1);}int main(){ struct timeval tpatart,tpend; float t

2020-09-30 09:52:23 378

原创 arm_linux 时间函数调用与转换

很简单的time函数,在time.h中定义,用法如下:#include <stdio.h>#include <time.h>int main (void){ time_t timep; time(&timep); printf("UTC time is 0x%08x\n",timep); timep=time(NULL); printf("UTC time is 0x%08x\n",timep); return 0;

2020-09-30 09:29:36 342

原创 arm_linux系统编程延时

系统编程中常用的延时函数:sleep,usleep内核编程中常用的延时函数ndelay、udelay、mdelaysleep:unsigned int sleep(unsigned seconds);//if sleep(x) return 0,means run ok//if return y means run x-y seconds,and release y secondsunsigned int usleep(useconds_t usec);//if usle..

2020-09-29 22:36:41 569

原创 arm linux fastboot烧写指令记录

– 烧写zImage内核命令: fastboot.exe flash kernel zImage– 输入烧写ramdisk 命令: fastboot.exe flash ramdisk ramdisk-uboot.img– 输入烧写system 文件系统命令: fastboot.exe flash system system.img– 输入擦除命令: fastboot -w– 输入重启开发板命令: fastboot reboot...

2020-09-28 15:57:20 296

原创 ARMLinux使用tftp工具来简化与开发板之间的数据传输步骤

在ubuntu或者centos等上位机上安装xinetd,tftp,tftpd三个软件apt install xinetd tftp tftpd然后配置/etc/xinetd.d/tftp文件强制格式对齐建好777权限的根目录mkdir /var/tftpboot重启服务/etc/init.d/xinetd restart服务端搭建完毕再看linux端,修改下面文件中的ip地址和ubuntu为同一网段,或者配置DHCP,使得可以ping通vim /..

2020-09-26 22:26:33 201

空空如也

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

TA关注的人

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