- 博客(244)
- 资源 (41)
- 收藏
- 关注

转载 BLE蓝牙笔记----连接参数更新
1、主机连接参数更新1.1、LL_CONNECTION_UPDATE_REQ连接参数第一次是主机发送的 CONNECT_REQ 中传递的。 而这个命令的使用只限主机使用,也就是说主机根据需要随时都可以进行参数更新。从机接收到这个命令后要么使用参数,要么断开连接。LL_CONNECTION_UPDATE_REQ包格式Instant :在连接更新参数时,并不是请求发送过去,这些参数就立刻生效,是在约定的时刻进行更新。BLE 的同步是通过一个连接事件计数器控制的。而这个数据包中的 Instan.
2021-01-24 15:27:12
4084

转载 BLE蓝牙笔记----数据包解析
目录1、包格式2、广播包2.1、PDU Type2.2、MAC地址3、数据包3.1、LLID3.1.1、LL Data PDU3.1.2、LL Control PDU3.2、NESN/SN3.3、MD1、包格式2、广播包2.1、PDU Type具体定义如下。可以看出扫描PDU和发起连接PDU都属于广播包2.2、MAC地址TxAdd/RxAdd,各占1bit,表示随后的Device Address字段代表的蓝牙MAC地...
2021-01-23 22:28:41
11472

转载 BLE蓝牙笔记----广播连接过程
目录1、广播1.1、广播间隔1.2、三个信道切换时间间隔1.3、广播事件2、扫描与应答3、建立连接3.1、锚点3.2、重要的时间参数3.3、连接状态--主机3.2、连接状态--从机4、广播软件设计流程图1、广播在广播事件中, 每一个广播事件都会在 3 个广播信道中进行数据传输, 而且每一个事件都是以最小的信道编号开始传输;也就是说当广播事件来了,这个 PDU 是依次从广播通道 37、 38、 39 中进行传输。并不是一起同时在三个信道一起广播;设...
2021-01-23 19:32:19
9106

原创 linux驱动之I2C总线驱动框架分析
Table of Contents1、I2C模型框图2、设备信息层2.1、非设备树形式2.2、设备树形式3、芯片控制器层adapter3.1、控制器初始化3.2、控制器底层传输函数(起始,数据,应答,停止)4、核心层core.c i2c_bus4.1、i2c_bus总线初始化4.2、client(设备)和i2c_driver(设备驱动)匹配过程4....
2020-05-06 13:46:06
1146
1

原创 linux内核移植步骤
1.解压内核源码 tar -jxvf linux-xxx.tar.bz2 或者 tar -zxvf linux-xxxx.tar.gz2.清除之前的配置clean - 清大部分生成的文件, 但是保留配置文件, 以及可以保证足够编译模块的信息。mrproper - 清所有的生成文件, 以及配置文件, 以及各种备份文件distclean - mrproper 效果 + ...
2020-04-23 23:14:35
3898

转载 linux 文件打开(open)原理,非父子进程,父子进程打开文件关系
1、文件描述符fd和文件描述符表概述在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引(fd),其是一个非负整数(通常是小整数),文件描述符fd和文件file指针是文件描述符表的重要内容,用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚...
2020-03-04 19:10:18
3086

转载 位置有关码和位置无关码详细解释
1、总体介绍代码的运行分为三个阶段:取指,译码,执行,而取指令肯定要知道代码地址,执行过程又包含对变量的读写,对变量的读写也得知道变量的地址吧,至于代码的地址和变量的地址怎么确定呢?答:由编译器确定,编译器确定地址分为两种形式,1、根据当前PC+偏移地址确定地址。2、直接用链接地址对于第一种方式,地址是动态的,会根据PC的值变化而变化,对于第二种方式就是固定为我们指定的链接地址...
2020-03-01 22:56:05
3666
3

原创 uboot 代码重定位(位置有关码)(存储地址,运行地址,链接地址)
Table of Contents1、代码启动过程简要分析2、存储地址,运行地址,链接地址2.1、存储地址2.2、链接地址2.3、运行地址2.4、链接地址和运行地址的区别3、位置有关码,位置无关码详细解释4、代码重定位参考文章:https://blog.youkuaiyun.com/lizuobin2/article/details/52049892#1、代...
2020-03-01 18:31:44
5144
2

原创 linux (platform driver)平台设备驱动匹配方法
Table of Contents一、匹配函数platform_match1.1、设备树匹配方法1.2、id_table匹配方法1.3、dev-name和platform_driver->drv->name匹配方法一、匹配函数platform_match平台设备驱动分为设备层和驱动层,每当有新的设备或者新的设备驱动注册时都要首先调用匹配函数进行匹配...
2020-02-23 16:01:48
3347

原创 LCD数据手册解析
Table of Contents一、基本信息(分辨率尺寸)二、时序解析2.1、水平horizontal2.2、垂直vertical2.3、时钟相位极性(上升沿,或者下降沿有效)一、基本信息(分辨率尺寸)二、时序解析linux LCD驱动开发之原理时序分析(二)2.1、水平horizontalHS Blanking = HSPW + HBP...
2020-02-21 18:09:05
3828

原创 linux LCD 驱动编写(四)
一、应用程序访问驱动原理LCD驱动程序假设app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0--------------------------------------------------------------kernel: fb_open int fbidx = iminor(inode...
2020-02-21 16:28:37
687

原创 Linux LCD重要数据结构解析
一、struct fb_infoFb.h linux-3.5\include\Linux用法://驱动程序必须用这个结构体定义的成员,并且从平台设备数据中取出信息对该结构体进行填充struct fb_info {atomic_t count;int node;int flags;struct mutex lock; /* Lock for open/releas...
2020-02-21 14:27:08
764

原创 tiny4412之内存控制器寄存器配置(DDR3 SDRAM)(三)
Table of Contents一、CONCONTROL寄存器1.1、chipn_empty1.2、clk_ratio二、MEMCONTROL寄存器2.1、bl (Memory Burst Length)突发长度2.2、Number of Memory Chips 内存数量配置2.3、芯片数据位宽度2.4、内存类型(DDR DDR2 DDR3 LPDDR2-S...
2020-02-13 18:37:48
1290
1

转载 tiny4412之内存控制器工作时序(DDR3 SDRAM)(二)
Table of Contents一、SDRAM 简易工作流程二、tRCD 行列延迟RAS to CAS Delay三、 CL(RL,Read Latency)读取潜伏期四、tWR 写延迟五、突发长度--(Burst Lengths)六、预充电时间tRP七、刷新时间八、例说一、SDRAM 简易工作流程二、tRCD 行列延迟RAS to CAS Delay...
2020-02-12 18:56:21
1271

原创 tiny4412之内存控制器(DDR3 SDRAM)(一)
Table of Contents一、原理图解析1.1、jz24401.1.1、jz2440引脚说明1.1.2、地址(ADDR)引脚说明1.1.3、Bank引脚说明1.1.4、DQM引脚说明1.1.5、片选(CS)说明(决定寻址起始地址)1.1.2、jz2440内存大小计算方法1.2、tiny44121.2.1、tiny4412引脚说明1.2.2、D...
2020-02-09 22:56:39
1734

原创 linux 自带LCD驱动框架(三)
一、驱动框架图二、内核kernel层(Framebuffer)2.1、入口出口函数(init exit)/*linux/drivers/video/fbmem.c*/主设备号: 29,提供了读写相关接口函数#define FB_MAJOR 29 /* /dev/fb* framebuffers */static const struct fi...
2019-12-26 17:20:57
832

转载 linux LCD驱动开发之原理时序分析(二)
Table of Contents一、LCD显示图像原理:2.1、物理屏、 虚拟屏认识2.2、扫描原理二、LCD时序分析:2.1、控制信号:2.2、重要的时间参数:2.3、帧的传输过程2.4、行中像素数据传输过程三、专业术语(英文解释):一、LCD显示图像原理:硬件接口见:https://blog.youkuaiyun.com/shenlong1356/articl...
2019-12-24 17:01:28
1217

原创 LCD驱动之接口分析(一)
Table of Contents一、LCD基础知识1.1、常见接口1.1.1、 TTL接口:1.1.2、LVDS接口:1.1.3、MIPI接口:1.1.4、EDP接口1.1.5、VGA1.1.6、HDMI1.2、LCD应用领域一、LCD基础知识1.1、常见接口参考博客:https://blog.youkuaiyun.com/wocao1226/artic...
2019-12-23 22:00:32
4301

原创 linux 驱动之设备树基础概念
Table of Contents一、设备节点1.1、节点命名方式二、节点内的属性1、属性值格式2.1.1、字符串2.1.2、32 位无符号整数2.1.3、字符串列表2、标准属性2.2.1、compatible 属性2.2.2、model 属性2.2.3、status 属性2.2.4、#address-cells 和#size-cells 属性2...
2019-12-15 17:31:41
1307

原创 linux设备树驱动之地址编码#address-cells和#size-cells
// 父节点的address-cells和size-cells决定子节点的reg的address和lenth字段的长度,cell的单位为32bit#address-cells // 子节点reg的address为几个32bit的整型数据#size-cells // 长度为几个32bit整型数据,如果为0,则没有lenth字段node{ reg = <addres...
2019-12-10 15:13:13
2177

原创 linux 驱动之自旋锁笔记
Table of Contents一、自旋锁介绍二、使用自旋锁注意事项三、自旋锁编程步骤1.定义自旋锁2.初始化自旋锁3.获得自旋锁4.释放自旋锁5、自旋锁使用模板四、衍生自旋锁五、参考代码一、自旋锁介绍自旋锁(Spin Lock)是一种典型的对临界资源进行互斥访问的手段,名称来源于它的工作方式。为了获得一个自旋锁,在某CPU上运行的代码需先...
2019-11-30 20:43:33
349

原创 linux 驱动之原子操作
Table of Contents一、原子操作介绍二、什么情况下选择使用原子操作?三、原子操作编程步骤1、定义并初始化原子变量 atomic_t2、对原子变量进行原子操作(计数)1)、原子变量自增/自减2)、原子变量加/减3)、设置原子变量的值4)、获取原子变量的值5)、操作并测试6)、操作并返回四、参考代码一、原子操作介绍什么叫原...
2019-11-30 16:55:23
548

原创 linux 驱动之定时器编程
Table of Contents定时器简介1、HZ2、jiffies3、tick (节拍)定时器编程步骤1、定时器初始化2、添加定时器到内核并启动定时器3、编写定时处理函数4、其他操作参考代码定时器简介1、HZ系统定时器频率,与体系结构相关,系统启动根据HZ设置定时器硬件HZ = (100) (ARM 平台)2、jiffies...
2019-11-28 20:44:13
402

原创 linux 中断之工作队列workqueue (自己创建的工作队列,减小默认线程负担)
默认工作队列和自己创建工作队列对比介绍1、上一节我们用的是schedule_work(&btn_work); 和schedule_delayed_work(&btn_dwork, 5*HZ);调度任务这两个调度函数都是把任务交个内核默认线程(event)管理执行,一旦向内核默认线程提交的任务太多,将导致内核默认线程负担太重,影响实时性2、这一节我们使用的是queu...
2019-11-28 16:52:11
803

原创 linux 中断之工作队列workqueue (默认的工作队列,内核默认线程负担重)
Table of Contents什么是workqueue两种形式的工作队列编程步骤1、初始化2、登记调度参考代码什么是workqueueLinux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。工作队列(workq...
2019-11-28 12:06:38
751

原创 linux 中断之tasklet
Table of Contents1、tasklet 初始化2、tasklet 处理函数3、tasklet的登记调度参考代码1、tasklet 初始化#define DECLARE_TASKLET(name, func, data) \struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data...
2019-11-28 11:24:31
211

原创 SPI裸机驱动学习笔记
CPOL和CPHA详解CPOL 时钟极性表示时钟CLK线空闲状态时高还是低CPOL=0 空闲状态为低CPOL=1 空闲状态为高CPHA 时钟相位表示第一个还是第二个边沿采集数据CPHA=0 第一个边沿采集数据CPHA=1 第二个边沿采集数据SPI四种模式我们常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上...
2019-11-14 21:24:15
469

原创 stm32外扩外部sram学习笔记
在一般情况下stm32内部sram是足够使用的 MDK配置如下 但是有些时候内存是不够用的,比如用到ucgui的时候或者做大项目时就需要外扩sram,倘若你要把外部sram作为运行内存则可以做如下配置: 另外一种方法就是自己写malloc函数,正点原子的内存管理函数可以借鉴一下:__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribu...
2019-08-02 10:29:49
8431

原创 stm32 USB学习笔记
发现csdn写博客的markdown很不好用,转到博客园了下面的文章希望对大家有帮助,高手绕道:https://www.cnblogs.com/shenLong1356/p/11287833.html...
2019-05-09 09:37:14
1757

原创 linux驱动--输入子系统input
参考:https://blog.youkuaiyun.com/lizuobin2/article/details/51508839目录什么是输入设备框架:输入子系统的工作流程(以按键为例):1、开机,执行input.c input_init函数2、应用程序打开输入设备input_open_file,通过input_table找到事件处理器3、应用程序调用read函数 ...
2019-04-02 17:20:08
306

原创 linux驱动 struct file_operations 解析
目录file_oprations整体解析int (*open) (struct inode *, struct file *);int (*release) (struct inode *, struct file *);ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*w...
2019-04-02 11:52:59
1316
1

转载 ARM--LCD控制原理笔记
目录LCD接口介绍:概念:2440LCD接口原理图解析:LCD显示图像原理:扫描:LCD时序:控制信号:时序图:时序图时间参数:LCD 控制器LCD接口介绍:概念:2440LCD接口原理图解析:①是时钟信号,每来一个CLK,电子枪就移动一个像素;②是用来传输颜色数据;③是垂直方向同步信号...
2019-03-28 17:33:03
1299

原创 linux驱动——平台总线驱动 platform_driver
目录:平台总线的意义:平台总线定义:平台总线的设备和驱动 platform_device 和 platform_driver平台总线驱动的编写步骤:1、定义设备和资源:2、定义驱动和实现probe方法3、匹配方法解析4、接口函数(open read write ....)亮灯和灭灯 的实现参考别人的笔记:实验代码:plat_ded_pdrv.cp...
2019-03-26 17:13:44
2146

原创 linux设备驱动之——总线模块驱动编写步骤
目录:总线设备驱动模型设备 总线 驱动 分离思想文件系统sysfs实验1:完成mybus的构建实验步骤实验1代码:实验运行结果:驱动实验总结:总线设备驱动模型设备 总线 驱动 分离思想文件系统sysfs总线bus下面很多总线,包括要学习的平台设备:platform...
2019-03-25 21:47:43
920

原创 嵌入式字符设备驱动编写步骤
目录编写步骤:设备号的申请注册注销:通用函数(静态动态申请都可以):静态申请:动态申请:设备号的注销:设备节点的创建与销毁:手动创建设备节点:自动创建设备节点:设备节点的销毁:IO资源的映射与配置:读写函数编写,操作IO口,比如点灯:应用实验程序的编写驱动示例代码:编写步骤:/*编写步骤:**1、编写驱动模块的基本框架h...
2019-03-09 20:42:58
1588

原创 linux驱动基本命令
加载驱动:insmod driver.ko卸载驱动:rmmod driver注意:卸载没有.ko列出加载了哪些驱动: lsmod
2019-03-09 16:03:01
5203

原创 电子设计大赛PID算法总结
pid核心算法如下:pid.En=pid.setdianya-pid.currdianya; //求本次误差pid.Dout=pid.Kp*pid.En-pid.I*pid.En_1+pid.D*pid.En_2; //求输出增量pid.currpwm+=pid.Dout; //本次应该输出的PWM // 计算输出量if(pid.currpwm&amp;amp;amp;gt;pid.pwm_c...
2018-12-01 10:14:37
1912

原创 makefile学习笔记
shell变量的使用 使用变量时在其前面加上($)符号 变量的赋值(=)与变量还有值之间都不能有空格,否则不是自己想要的结果shell怎么调用linux命令 命令前加反引号(就是esc下面的键) 例如 PWD=pwd echo $PWD 效果和执行命令pwd一样if then else结构if [表达式]; then #表达式和括号要有...
2018-08-04 11:47:32
285

原创 c++多态
当子类成员变量与父类成员变量同名时 子类依然从父类继承同名成员 在子类中通过作用域分别符::进行同名成员区分 同名成员存储在内存中的不同位置函数重写和函数重载的区别 函数重写: 在子类中定义与父类中原型相同的函数发生函数重写,函数重写只发生在父类与子类之间 函数重载:是一个类里面有相同的函数名参数不同才叫函数重载函数重写 父类中被重写的函...
2018-07-11 11:41:26
147
正点原子stm32f407探索者LD3320语音识别程序
2020-06-03
stm32 sim800c定位http协议发送定位信息给服务器.7z
2020-05-24
51单片机多任务编程思想
2018-01-31
stm32f107ptp时钟同步
2018-01-30
人工智能白皮书2018版本
2018-01-30
c++计算器课程设计
2018-01-26
stm32f107ptp移植程序
2018-01-24
51单片机课程设计音乐播放器
2018-01-03
stm32mp3模块
2017-12-29
嵌入式c语言状态机实例
2017-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人