bootcmd和bootargs环境变量
环境变量bootcmdbootcmd 保存着 uboot 默认命令, uboot 倒计时结束以后就会执行 bootcmd 中的命令。这些命令一般都是用来启动 Linux 内核的,比如读取 EMMC 或者 NAND Flash 中的 Linux 内核镜像文件和设备树文件到 DRAM 中,然后启动 Linux 内核。
如果 EMMC 或者 NAND 中没有保存 bootcmd 的值,那么 uboot 就会使用默认的值,板子第一次运行 uboot 的时候都会使用默认值来设置 bootcmd 环境变量。
不设置bootcmd使用默认从emmc启动,先检查一下 EMMC 的分区 1 中有没有Image 文件和设备树文件,输入命令“ls mmc 1:1” 那么可以定义CONFIG_BOOTCOMMAND
12345#define CONFIG_BOOTCOMMAND \"mmc dev 1;" \"fatload mmc 1:1 0x80800000 zImage;" \"fatload mmc 1:1 0x83000000 imx6ull-a ...
U-Boot移植
Uboot的移植首先从官方下载一个Uboot,之后在此上面进行移植,可以进行使用脚本进行编译一下。
123make ARCH=arm CORSS_COMPILE=arm-linux-gnueabihf- distcleanmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfigmake V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
在Uboot中添加使用的开发板添加开发板默认配置文件将cofigs目录下复制原有的mx6ull_14x14_evk_emmc_defconfig进行修改
1cp mx6ull_14x14_evk_emmc_defconfig mx6ull_alientek_emmc_defconfig
修改mx6ull_alientek_emmc_defconfig文件,将原有的替换成mx6ull_alientek_emmc
12345CONFIG_SYS_EXTRA_OPTIONS="IMX_CO ...
U-Boot启动流程
Uboot顶层Makefile详解(123条消息) U-Boot 顶层 Makefile 详解_River-D的博客-CSDN博客
名字
描述
备注
api
与硬件无关的 API 函数。
uboot 自带
arch
与架构体系有关的代码
uboot 自带
board
不同板子的代码
uboot 自带
cmd
命令相关的代码
uboot 自带
common
通用代码
uboot 自带
configs
配置文件
uboot 自带
disk
磁盘分区相关代码
uboot 自带
doc
文档
uboot 自带
drivers
驱动代码
uboot 自带
dts
设备树
uboot 自带
examples
示例代码
uboot 自带
fs
文件系统
uboot 自带
include
头文件
uboot 自带
lib
库文件
uboot 自带
Licenses
许可证相关代码
uboot 自带
net
网络相关代码
uboot 自带
post
上电自检代码
uboot 自带
scripts
脚本文件
uboot 自带
...
imx6ull SPI控制六轴
SPISPI 全称是 Serial Perripheral Interface,也就是串行外围设备接口。是一种高速、全双工的同步通信总线,SPI 时钟频率相比 I2C 要高很多,最高可以工作在上百 MHz。
SPI原理超详细讲解-值得一看 (stmicroelectronics.cn)
支持单主多从模式应用,时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first)。 4线SPI器件有四个信号:时钟(SPI CLK, SCLK)、主机输出从机输入(MOSI)、主机输入从机输出(MISO)、片选(CS/NSS)。
SPI数据传输在MOSI、MISO和SPI主从机内部的数据寄存器构成一个数据串行传输的环路,在时钟SCLK的控制下实现数据的环形传输。 要开始SPI通信,主机必须发送时钟信号,并通过使能NSS信号选择从机。
SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必 ...
git提交代码到远程仓库
git如何提交代码到远程仓库使用这个的原因的是看到有的嵌入式就职询问会问道,而且使用git可以将本地代码部署到github,可以备份,多台电脑开发一个工程很方便。
首先是进行安装git再Linux的系统
1sudo apt-get install git
注册用户名和邮箱
12git config --global user.name "用户名"git config --global user.email "邮箱"
检查配置信息的命令
1git config --list
下载代码
使用git clone从现有的git仓库中拷贝项目
1git clone 仓库地址
如果克隆到指定目录
1git clone 仓库地址 目录
如果git clone卡住了,可以参考以下链接极智开发 | 解决 linux 上 git clone 慢或失败的方法 - 知乎 (zhihu.com)
上传代码
初始化本地仓库
1git init
之后就可以往这个目录中写入文件,之后使用以下命令进行部署
123456789101112131415git add . ...
Imx6ull数据手册生词
生词
汉译
prescaler
预分频器
programmable
可编程
route
线路
formula
公式
subroutine
子程序
reprogram
重新编程
parameter
参数
slave
从机
arbitration
仲裁
addressed
解决
multiplexing
多路复用
acknowledge signal
应答信号
master drive high
主驱动器高
pending
待定
idle
闲置
muxe
多路复用器
peripheral
外设
dedicated software
专用软件
daisy chain
菊花链式结构
external
外部
diagram
图
synchronize
同步
field
场
initialize the counter
初始化计数器
duplex
双工
synchronous
同步
polarity
极性
FIFO
先进先出
kernel
内核
relocaddr
搬迁地 ...
imx6ull的IIC实验
I2C协议IIC是半双工通信(同一时间单向通信),I2C 使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线),另外一条是 SDA(串行数据线),这两条数据线需要接上拉电阻,总线空闲的时候 SCL 和 SDA 处于高电平。I2C 总线标准模式下速度可以达到 100Kb/S,快速模式下可以达到 400Kb/S。I2C 总线工作是按照一定的协议来运行的,接下来就看一下 I2C 协议。
主机就是负责整个系统的任务协调与分配,从机一般是通过接收主机的指令从而完成某些特定的任务,主机和从机之间通过总线连接,进行数据通讯。
发布主要命令的称为主机
接受命令的称为从机
IIC主设备功能:主要产生时钟,产生起始信号,停止信号。
IIC从设备功能:可编程的IIC地址检测,停止位检测。
**IIC的一个优点是它支持多主控(multimastering)**, 其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
I2C是支持多从机应答,也就是一个 I2C 控制器下可以挂多个 I2C 从设 ...
imx6ull的RTC 实时时钟实验
实时时钟实现原理I.MX6U 系列的 RTC 是在 SNVS 里面,SNVS 直译过来就是安全的非易性存储,SNVS 里面主要是一些低功耗的外设,包括一个安全的实时计数器(RTC)、一个单调计数器(monotonic counter)和一些通用的寄存器。SNVS 有两部分:SNVS_HP 和 SNVS_LP,系统主电源断电以后 SNVS_HP 也会断电,但是在后备电源支持下,SNVS_LP 是不会断电的,而且 SNVS_LP是和芯片复位隔离开的,因此 SNVS_LP 相关的寄存器的值会一直保存着。
①、SNVS_LP:专用的always-powered-on电源域,系统主电源和备用电源都可以为其供电。②、SNVS_HP:系统(芯片)电源。
SNVS_LP和SNVS_LP都有SRTC,为保证掉电后依旧可以执行,所以设置SNVS_LP中的SRTC来实现实时时钟。
在硬件方面,SRTC需要外界提供一个32.768KHz的时钟,寄存器 SNVS_LPSRTCMR 和 SNVS_LPSRTCLR 保存着秒数,直接读取这两个寄存器的值就知道过了多长时间了。
使用的SNVS寄存器:①SNVS_HP ...
补充知识点
嵌入式面向对象编程面向对象,是编程界的一个概念。什么叫面向对象呢?编程有两种要素:程序(方法),数据(属性)。例如:一个LED,我们可以点亮或者熄灭它,这叫方法。LED什么状态?亮还是灭?这就是属性。我们通常这样编程:
12345u8 ledsta = 0;void ledset(u8 sta){}
这样的编程有一个问题,假如我们有10个这样的LED,怎么写?这时我们可以引入面向对象编程,将每一个LED封装为一个对象。可以这样做:
1234567891011121314151617181920212223242526272829303132333435363738394041424344/*定义一个结构体,将LED这个对象的属性跟方法封装。这个结构体就是一个对象。但是这个不是一个真实的存在,而是一个对象的抽象。*/typedef struct{ u8 sta; void (*setsta)(u8 sta);}LedObj;/* 声明一个LED对象,名称叫做LED1,并且实现它的方法drv_led1_setsta*/void drv_led1_s ...
imx6u的RGBlCD显示
像素格式一个像素点就相当于一个 RGB 小灯,通过控制 R、G、B 这三种颜色的亮度就可以显示出各种各样的色彩。那该如何控制 R、G、B 这三种颜色的显示亮度呢?一般一个 R、G、B 这三部分分别使用 8bit 的数据,那么一个像素点就是 8bit*3=24bit,也就是说一个像素点3 个字节,这种像素格式称为 RGB888。如果再加入 8bit 的 Alpha(透明)通道的话一个像素点就是 32bit,也就是 4 个字节,这种像素格式称为 ARGB8888。
一个像素点是 4 个字节,其中 bit31bit24 是 Alpha 通道,bit23bit16 是RED 通道,bit15bit14 是 GREEN 通道,bit7bit0 是 BLUE 通道。所以红色对应的值就是0X00FF0000,蓝色对应的值就是 0X000000FF,绿色对应的值为 0X0000FF00。通过调节 R、G、B的比例可以产生其它的颜色,比如0X00FFFF00就是黄色,0X00000000就是黑色,0X00FFFFFF就是白色。
R[7:0]、G[7:0]和B[7:0]这24根是数据线,DE、 ...