
嵌入式学习
lee_jimmy
长期DJI内推,所有岗位都有,有意愿者可以发送简历到我的邮箱:651074561@qq.com
展开
-
Linux系统出现bus error错误
在使用memtester工具对DDR进行压力测试时,出现了一下的报错:# memtester 200M 1memtester version 4.3.0 (32-bit)Copyright (C) 2001-2012 Charles Cazabon.Licensed under the GNU General Public License version 2 (only).page...原创 2020-01-18 13:23:28 · 7337 阅读 · 0 评论 -
位置无关码的含义
今天学习的过程中又遇到了“位置无关码”这个概念,竟然一时间想不起来什么意思了,所以证明之前并没有完全搞懂啊!!!再次百度了一下别人的文章,总算又加深了一遍印象。 这篇文章讲的通俗易懂,可以借鉴一下:代码重定位和位置无关码。其中讲到位置无关码的含义就是,在我们写的裸板程序时,链接地址的起始地址是从0x30000000,比如下面所示:SECTIONS{ ...原创 2019-03-31 11:51:20 · 439 阅读 · 0 评论 -
NAND flash驱动程序(2)
前言 上一篇文章(NAND flash驱动程序(1))我们已经分析过了书写一个nand flash的大致框架是什么样的,现在我们再次回忆一下大致的流程:(1)分配一个nand_chip和mtd_info结构体(2)根据自己的需要,构造nand_chip结构体。以及一些硬件相关的设置(3)最后就是调用nand_scan()和add_mtd_partitions()函数...原创 2019-02-23 23:32:29 · 1238 阅读 · 0 评论 -
【ARM64】DTB地址从uboot传递到kernel的流程
前言 最近在移植一款蓝牙芯片的过程中用到了设备树,一开始在研究kernel是怎么解析DTB的,后来就很好奇kernel是怎么找到DTB的,所以就有了这篇文章,纯粹记录一下自己的学习过程吧。正文 下面我就从两个阶段来讲述,第一个阶段就是uboot是怎么将DTB的地址传递给kernel;第二个阶段就是kernel怎么根据DTB的地址,并解析DTB的。uboot阶...原创 2019-02-24 12:54:26 · 6543 阅读 · 0 评论 -
从零开始写一个简单的bootloader(2)
从零开始写一个简单的bootloader(1) 前言 上一篇文章我们介绍了一些初始化的动作,包括:关看门狗、设置系统时钟、初始化SDRAM、初始化NAND flash还有重定位代码等。这篇文章就开始介绍怎么把内核读到内存、怎么设置传递给内核的参数以及跳转执行内核。正文我们先给出代码,再对代码做详细的分析int main(void){ void (*t...原创 2018-09-01 15:55:45 · 1841 阅读 · 0 评论 -
NAND FLASH的读操作及原理
硬件原理上面是我使用的NAND FLASH的硬件原理图,面对这些引脚,很难明白他们是什么含义,下面直接引用韦东山老师的课程中的提问:NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A"问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地址?答1.在DATA0~DATA7上既传输数据,又传输...原创 2018-08-26 22:01:46 · 10309 阅读 · 0 评论 -
从零开始写一个简单的bootloader(1)
前言 之前学习嵌入式裸板程序也有一定的时间了,而一个bootloader则是裸板程序的一个集大成者,能包含很多的知识点,所以编写一个bootloader能巩固之前的所学。废话少讲,下面就开始正式的编写。目标 相信搞嵌入式的都知道bootloader是什么东西,这里我就不作详细介绍,简单说一下我编写的bootloader要做什么工作。bootloader的终极目标...原创 2018-08-26 20:20:06 · 14351 阅读 · 2 评论 -
S3C2440芯片的SDRAM初始化设置
从零开始写一个简单的bootloader(1) 前言 我使用的板子的内存是由两片64M大小的SDRAM组成,所以实际内存有128M。分别连接到芯片的BANK6和BANK7。 下面是用不同的启动方式,内存地址的映射图,主要的不同点就是,4K大小的SRAM的起始地址有所不同。这个图非常重要,后面很多地方用到的内存地址可以参考这里。 下图...原创 2018-08-26 16:15:48 · 1381 阅读 · 1 评论 -
S3C2440芯片的时钟体系结构
从零开始写一个简单的bootloader(1) 下图是S3C2440芯片的整体架构图:其中,AHB BUS为高速设备的总线,H即为high的意思。APB BUS为低速设备的总线,P为英文单词peripheral(外围设备)。不同的总线,挂载在上面的设备运行的频率肯定是不一样的,在我们这款S3C2440芯片中:Fclk就是CPU的运行频率,最高可达400MHz...原创 2018-08-26 15:01:12 · 1312 阅读 · 0 评论 -
UART协议简述及编程
UART原理简述 通用异步收发器简称UART(universal asynchronous receiver transmitter)。他的用途很广泛,一般常用的就是用来输出打印的信息,也可以外接各种模块,例如GPS和蓝牙等。 正是因为这种协议非常的简单可靠,所以才那么的受欢迎。它只需要三条线,TxD用来发送数据,RxD用来接收数据,以及一根接地线Gnd。UAR...原创 2018-08-12 19:06:20 · 15462 阅读 · 2 评论 -
接收红外遥控器原始数据的简单实现
编程要点(1)双边沿触发,在每个脉冲的边沿都要产生中断 (2)发生中断时,计算当前中断与上次中断的时间差,也就是脉冲的宽度;另外概要记录脉冲的极性。把这两个数据都记录下来,放入一个buffer里面(3)主循环从buffer中取数据,并解析这些数据。我们的buffer主要用环形缓冲区来实现。 环形缓冲区 上面提到了环形缓冲区,其实在网上一大堆资料介绍,我...原创 2018-07-22 13:04:00 · 3997 阅读 · 1 评论 -
红外线遥控协议简介(NEC格式)
平常工作中接触的都是NEC格式的遥控器,这里也只讲NEC格式的。 当按下遥控器的一个按键时,会发出一帧的数据,这一帧的数据的组成分别是:引导码、地址码、地址码的反码、数据码和数据码的反码。当发送的地址为00h(00000000b),发送的红外数据为ADh(10101101b)时的一帧的格式大概如下(下面的极性和上面的图刚好相反,但是不影响理解协议):由上面的图可以看出,每个码...原创 2018-07-15 21:02:19 · 27420 阅读 · 4 评论 -
高精度延时函数的实现
1、用for函数实现void udelay(){ int i; for(i=0; i<xxx; i++);}void test(){ while(1) { udelay(); GPIO_SET(1); //拉高电平 udelay(); GPIO_SET(0); //拉低电平 }} 在udelay函数中,用一个for循环进行延时,但是我们怎么...原创 2018-06-30 18:51:18 · 2284 阅读 · 0 评论 -
I2C协议原理简述
1、传输流程I2C是主从结构,所有的数据都是mater发起的,slave接收或者回应。比如上面的框图所示,一主多从。那么这么多的从设备,是如何做到选择哪个呢?我们看一下发送接收的流程。(1)在SCL的高电平时,SDA由高变低,发出start信号(2)后面的9个时钟周期内发送了9次的SDA信号,前7个位表示的设备地址(注:每个从设备的地址是写死在从设备芯片...原创 2018-06-10 17:12:31 · 1703 阅读 · 0 评论 -
触摸屏校准原理
1、 如上图,假如底下是LCD,上面是触摸屏膜(TS)。假设分辨率是480*272,那么在LCD坐标为(0,0)的地方,TS对应的点坐标为(x1',y1')。LCD坐标为(479,271)的地方,TS对应的点为(x2',y2')。 那么,假如触电的坐标为(x',y'),对应的LCD的点坐标呢?2、为了简化,我们先看x轴的坐标:由上图我们可以得到一个等式,(x' - x1')...原创 2018-05-27 15:58:58 · 4603 阅读 · 1 评论 -
电阻触摸屏原理简述
(1)电阻触摸屏的原理 一个均匀的电阻R,假如上面接3.3V,下面一端接地。那么假设在X点处,电阻为R1,这一点的电压V1就可以由欧姆定律得到,3.3/R=V1/R1,即V1=3.3*(R/R1),假如整个电阻长度L,那么可以得到,V1=3.3*(L/X)。 可以看得出V1和X成线性关系,而电阻触摸屏也是用了欧姆定律得到触摸点在屏幕上的坐标。(2) 我们电子设备上...原创 2018-05-16 23:48:56 · 7900 阅读 · 2 评论 -
S3C2440芯片的LCD控制器
1、LCD控制器的功能(1)取数据:把framebuffer的地址告诉LCD控制器。另外需要把framebuffer中对应每个像素的数据格式告诉控制器,例如bpp(Bits Per Pixels),分辨率等(2)发数据:把时序告诉LCD控制器,设置引脚的极性(是高电平有效还是低电平有效)2、LCD控制器框图(1)图中的LCDCDMA是从framebuffer取数据的模块,我们都知道DMA是不用在C...原创 2018-05-01 13:24:08 · 1468 阅读 · 0 评论 -
LCD硬件原理
1、LCD显示的几个问题(1)如何移动电子枪每来一个时钟(clk)就移动一个像素(2)颜色如何确定由RGB三组线确定每个像素点的颜色(3)电子枪如何得知跳到下一行电子枪接收到Hsync(水平同步信号)脉冲就跳一行(4)电子枪如何得知跳回原点电子枪接收到Vsync脉冲信号就跳一帧,回到原点(5)RGB线上的数据从何而来在内存中,会分配一块区域,也就是常说的framebuffer。每个像素点在这个fr...原创 2018-05-01 12:07:21 · 1313 阅读 · 0 评论 -
CPU模式(mode)、状态与寄存器
ARM920T的7种工作模式(1)usr:正常模式(2)sys:系统(3)异常模式und:未定义模式svc:管理模式abt:中止模式:指令预取数据访问irq:中断模式fiq:快中断模式2种状态(1)ARM指令集每条指令占用4字节(2)thumb指令集每条指令占用2字节比如指令 mov r0, r1使用不同指令集编译后,每条指令占用的空间大小不同ARM:4byte机器码THUMB:2byte机器码寄...原创 2018-04-15 15:59:03 · 5574 阅读 · 0 评论