文档库 最新最全的文档下载
当前位置:文档库 › SPI驱动程序结构分析 不错

SPI驱动程序结构分析 不错

SPI驱动程序结构分析 不错
SPI驱动程序结构分析 不错

Android源代码结构分析

目录 一、源代码结构 (2) 第一层次目录 (2) bionic目录 (3) bootloader目录 (5) build目录 (7) dalvik目录 (9) development目录 (9) external目录 (13) frameworks目录 (19) Hardware (20) Out (22) Kernel (22) packages目录 (22) prebuilt目录 (27) SDK (28) system目录 (28) Vendor (32)

一、源代码结构 第一层次目录 Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示: . |-- Makefile (全局的Makefile) |-- bionic (Bionic含义为仿生,这里面是一些基础的库的源代码) |-- bootloader (引导加载器),我们的是bootable, |-- build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具) |-- dalvik (JAVA虚拟机) |-- development (程序开发所需要的模板和工具) |-- external (目标机器使用的一些库) |-- frameworks (应用程序的框架层) |-- hardware (与硬件相关的库) |-- kernel (Linux2.6的源代码) |-- packages (Android的各种应用程序) |-- prebuilt (Android在各种平台下编译的预置脚本) |-- recovery (与目标的恢复功能相关) `-- system (Android的底层的一些库)

spiFLASH芯片WQ的单片机驱动代码

spiFLASH芯片WQ的单片机驱动代码 #include "w25q80.h" // 注:W25Q80由256 BYTE 组成一个PAGE,不可PGAE擦除,可以进行BYTE PROGRAM 或者PAGE PROGRAM // 由16 PAGE 组成一个SECTOR,可SECTOR擦除 // 由16 SECTOR组成一个BLOCK,可BLOCK 擦除 // 由16 BLOCK 组成一个FULL MEMEORY,可FULL MEMORY 擦除 // 所以,总容量是1M bytes // W25Q80主要命令字 #define READ_ARRAY 0x03 #define SECTOR_ERASE 0x20 #define BYTE_OR_PAGE_PROGRAM 0x02 #define WRITE_ENABLE 0x06 #define WRITE_DISABLE 0x04 #define READ_STATUS_REGISTER 0x05 #define Manufacturer_DeviceID 0x9F // 定义W25Q80的CS脚对应MCU的IO #define W25Q80_CS P1_2 // SPI硬件初始化 void Spi_Init(void) { PERCFG |= 0x02; // SPI1映射到P1口 P1SEL |= 0xE0; // P15~P17作复用功能(clk mosi miso) P1SEL &= ~0x04; // P12作GPIO P1DIR |= 0x04; // P12作输出 P1_2 = 1; // P12输出高电平 U1CSR &= ~0xA0; // SPI主方式 U1GCR &= ~0xC0; // CPOL=0 CPHA=0 U1GCR |= 0x20; // MSB U1BAUD = 0; // 波特率设为sysclk/8 U1GCR |= 0x11;

yaffs2文件系统制作

交叉编译器ARM-Linux-gcc4.1.2 开发板TX2440A Busybox-1.15.1.tar.bz2(在Linux中被称为瑞士军刀) mkyaffs2image工具 首先创建一个名字为root_2.6.31的文件夹,在其中创建如下文件夹 etc bin var dev home lib mnt proc root sbin sys tmp usr opt共14个文件夹 解压Busybox tar xjvf busybox 进入源目录,修改Makefile 第164行,CROSS_COMPILE=arm-linux- 第190行,ARCH=arm 执行#make men onfig进行配置 配置选项大部分都是保持默认的,只需要注意选择以下这几个选项,其他的选项都不用动:Busybox Setting---> Build Options---> [*]Build Busybox as a static binary(no shared libs) [*]Build with Large File Support(for accessing files>2GB) Installation Options--->

(./_install)Busybox installation prefix 进入这个选项,输入busybox的安装路径,如:../rootfs Busybox Library Tuning---> [*]vi-style line editing commands [*]Fancy shell prompts 要选择这个选项:“Fancy shell prompts”,否则挂载文件系统后,无法正常显示命令提示符:“[\u@\h\W]#” 配置完成以后 执行#make #make install 然后就会在上一级目录下生成rootfs文件夹,里面包含几个文件夹/bin/sbin/usr linuxrc 把这些文件全部复制到刚建好的root_2.6.31目录下, #cp–rf*../root_2.6.31 在dev目录下,创建两个设备节点: #mknod console c51 #mknod null c13 然后进入自己建立的etc目录 拷贝Busybox-1.15.2/examples/bootfloopy/etc/*到当前目录下。 #cp-r../../busybox-1.15.2/examples/bootfloopy/etc/*./ 包括文件:fstab init.d inittab profile

spi驱动代码

#include "spi.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 ////////////////////////////////////////////////////////////////////////////////// //以下是SPI模块的初始化代码,配置成主机模式,访问SD Card/W25Q64/NRF24L01 //SPI口初始化 //这里针是对SPI2的初始化 void SPI2_Init(void) { RCC->APB2ENR|=1<<3; //PORTB时钟使能 RCC->APB1ENR|=1<<14; //SPI2时钟使能 //这里只针对SPI口初始化 GPIOB->CRH&=0X000FFFFF; GPIOB->CRH|=0XBBB00000; //PB13/14/15复用 GPIOB->ODR|=0X7<<13; //PB13/14/15上拉 SPI2->CR1|=0<<10; //全双工模式 SPI2->CR1|=1<<9; //软件nss管理 SPI2->CR1|=1<<8; SPI2->CR1|=1<<2; //SPI主机 SPI2->CR1|=0<<11; //8bit数据格式 SPI2->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1 SPI2->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1 //对SPI2属于APB1的外设.时钟频率最大为36M. SPI2->CR1|=3<<3; //Fsck=Fpclk1/256 SPI2->CR1|=0<<7; //MSBfirst SPI2->CR1|=1<<6; //SPI设备使能 SPI2_ReadWriteByte(0xff);//启动传输 } //SPI2速度设置函数 //SpeedSet:0~7 //SPI速度=fAPB1/2^(SpeedSet+1) //APB1时钟一般为36Mhz void SPI2_SetSpeed(u8 SpeedSet) { SpeedSet&=0X07; //限制范围 SPI2->CR1&=0XFFC7; SPI2->CR1|=SpeedSet<<3; //设置SPI2速度 SPI2->CR1|=1<<6; //SPI设备使能 } //SPI2 读写一个字节

linux-2.6.18移植

Linux-2.6.18移植 有了我们的交叉编译环境和我们先前学的内核基础知识,下面我们就开始我们的内核移植了,我们所用的是博创的 S3C2410 。 关于 linux-2.6.18.tar.bz2 的下载网站先前我们说过,我们要先到该官方网站上去下载一个全新的内核。 [root@Binnary ~ ]# tar –jxvf linux-2.6.18.tar.bz2 [root@Binnary ~ ]# make mrproper 如果你是新下载的内核,那这一步就不用了。但如果你用的是别人移植好的内核,那最好在编译内核之前先清除一下中间文件,因为你们用来编译内核的交叉编译工具可能不同。 第一步:修改Makefile文件 将 改为 第二步:修改分区设置信息 我们要先在BootLoader中查看相应的分区信息 vivi>help 然后修改内核源码中的分区信息。分区信息文件在 a rch/arm/mach-s3c2410/common-smdk.c 将其中的

改为如下内容:

第三步:内核通过 BootLoader把数据写入NAND Flash,而vivi的ECC效验算法和内核的不同,内核的效验码是由NAND Flash控制器产生的,所以在此必须禁用NAND Flash ECC。所以我们就要修改 drivers/mtd/nand/s3c2410.c 这个文件。将 中的 chip->ecc.mode = NAND_ECC_SOFT ,改为如下 chip->ecc.mode = NAND_ECC_NONE。

只此一处。 第四步:下面是devfs的问题,因为2.6.12内核以后取消了devfs的配置选项,缺少了它内核会找不到mtdblock设备。所以我们需要修改 fs/Kconfig 文件,或者是从2.6.12的fs/Kconfig中拷贝下面几项到2.6.18的fs/Kconfig中去,我们采用修改的方法来完成。 修改 fs/Kconfig支持devfs 。 在Pseudo filesystems 主菜单的最后添加我们所要的内容。 第五步:文件系统的支持 Yaffs 文件系统 YAFFS文件系统简介 YAFFS,Yet Another Flash File System,是一种类似于JFFS/JFFS2的专门为Flash设计 的嵌入式文件系统。与JFFS相比,它减少了一些功能,因此速度更快、占用内存更少。 YAFFS和JFFS都提供了写均衡,垃圾收集等底层操作。它们的不同之处在于: (1)、JFFS是一种日志文件系统,通过日志机制保证文件系统的稳定性。YAFFS仅仅 借鉴了日志系统的思想,不提供日志机能,所以稳定性不如JAFFS,但是资源占用少。 (2)、JFFS中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机变量决定 要回收的块,通过这种方法能提供较好的写均衡,在YAFFS中是从头到尾对块搜索, 所以在垃圾收集上JFFS的速度慢,但是能延长NAND的寿命。 (3)、JFFS支持文件压缩,适合存储容量较小的系统;YAFFS不支持压缩,更适合存 储容量大的系统。 YAFFS还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用 户可以不使用Linux中的MTD和VFS,直接对文件进行操作。NAND Flash大多采用 MTD+YAFFS的模式。MTD( Memory Technology Devices,内存技术设备)是对Flash 操作的接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开。 Yaffs 文件系统内核没有集成,可以对其主页下载: https://www.wendangku.net/doc/c613498891.html,/cgi-bin/viewcvs.cgi/#dirlist

关于使用STM32硬件SPI驱动NRF24L01

关于使用STM32硬件SPI驱动NRF24L01+ 今天是大年初一总算有时间做点想做很久的事了,说到NRF2401可能很多电子爱好者都有用过或是软件模拟驱动又或是用单片机自带的硬件SPI来驱动,但不管是用哪种方法来驱动我想都在调试方面耗费了不少的时间(可能那些所谓的电子工程师不会出现这种情况吧!)网上的资料确实很多,但大多数都并没有经过发贴人认真测试过,有的只是理论上可以行的通但上机测试只能说是拿回来给他修改。本文作者也是经过无助的多少天才算是调试成功了(基于STM32硬件SPI,软件模拟的以前用51单片机已经调通了今天就不准备再拿来讲了,当然如果以后有朋友有需要也可以告诉我,我也可以重新写一篇关于51的驱动的只要有时间是没有问题的。)因为我用的是STM32F103C8T6的系统而且是刚接触不知道别的系统和我用的这个系统有多大的差别所以我不会整个代码全贴上来就完事了,我将就着重思路配合代码写出来,这样对于刚接触单片机的朋友会有很好的作用,但是还有一点请大家要原谅,可能会存在一些说的不好的地方,毕竟我没有经过正规渠道系统地学习过电子知识,对于前辈来说存在这样那样的问题不可避免的,在此也希望大家指教! 贴个图先:

NRF2401+的资料大家上网查一下,我输字的速度有点不好说!下面我来说一下整个调试流程吧 1.先把STM32串口一调通(因为我不知道STM32 I/O口不知可不可以像51那样并口输出数据,如果可以那就更方便啰)。 2.与NRF2401建立起通信(这个才是问题的关键);

3.利用读NRF2401的一个状态寄存器(STATUS)的值并通过串口发送到PC后通过51下载软件的串口助手显示出来(如果你用液晶来调试那你太有才了,你液晶和NRF2401存在牵连可能就会给寻找不成功的原因造成困难,而且还有不少硬件工作要做)在这说一下本文只调试发送程序,致于接收只改一个程序参数就行了。 我们先来调试STM32F103C8T6的串口1吧(也就是USART1)!它是STM32F103C8T6的片上外设之一,使用它时相对来说简单了不少。首先我要说一下我们要使用STM32的片上外设那么我们必须先对其进行初始化,实际上就是经过这段初始化代码让外设根据我们的要求来工作: void USART1_AllInit(void)//意思是USART1的所有初始化工作,我的英文不好所以可能涵数名可能也不怎么规范 { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟,它是在APB2这条总线上的 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟,它也是在APB2这条总线上的,因为USART1要用到GPIOA的端口所以也要初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

Yaffs2文件系统中对NAND Flash磨损均衡的改进

Yaffs2文件系统中对NAND Flash磨损均衡的改进 摘要:针对以NAND Flash为存储介质时Yaffs2文件系统存在磨损均衡的缺陷,通过改进回收块选择机制,并在数据更新中引入冷热数据分离策略,从而改善NAND Flash的磨损均衡性能。实验借助Qemu软件建立Linux嵌入式仿真平台,从总擦除次数、最大最小擦除次数差值和块擦除次数标准差等方面进行对比。实验结果表明,在改进后的Yaffs2文件系统下NAND Flash的磨损均衡效果有明显提升,这有益于延长NAND Flash的使用寿命。 关键词: Yaffs2文件系统;NAND Flash;垃圾回收;冷热数据 0 引言 NAND Flash存储设备与传统机械磁盘相比,具有体积小、存储密度高、随机存储和读写能力强、抗震抗摔、功耗低等特点[1]。它被广泛用于智能手机、车载智能中心、平板电脑等智能终端中。近年来,以NAND Flash为存储介质的固态硬盘也得到越来越多的应用。目前Yaffs2文件系统(Yet Another Flash File System Two,Yaffs2)[1]是使用最多、可移植性最好的专用文件系统,在安卓、阿里云OS、Linux等嵌入式系统中都有使用。在Yaffs2文件系统下以NAND Flash为存储介质时存在磨损均衡的缺陷,可通过对回收块选择机制作改进和引入冷热数据分离策略来提高磨损均衡的效果。 1 Yaffs2和Nand Flash关系 这里以使用最多的Linux操作系统为实践,将Yaffs2文件系统移植到Linux操作系统中。Linux系统通常可以分为3层:应用层、内核层和设备层,其中支持NAND Flash设备的Yaffs2文件系统属于内核层,。 最上层用户应用程序通过VFS(Virtual File System)提供的统一接口,将数据更新等文件操作传递给Yaffs2。VFS代表虚拟文件系统,它为上层应用提供统一的接口。有了这些接口,应用程序只用遵循抽象后的访问规则,而不必理会底层文件系统和物理构成上的差异。然后Yaffs2通过MTD(Memory Technology Device)提供的统一访问接口对NAND Flash进行读、写和擦除操作,从而完成数据的更新或者存储操作。MTD代表内存技术设备,它为存储设备提供统一访问的接口。最终,在NAND Flash上以怎样的格式组织和存储数据由Yaffs2文件系统决定。 NAND Flash由若干块(block)组成,每个块又是由若干页(page)组成,页中含有数据区和附加区。NAND Flash的页根据状态不同,可以分为有效页、脏页、空闲页。有效页中存放有效数据,脏页中存放无效数据,空闲页是经过擦除后可以直接用于写入数据的页。NAND Flash在写入数据前需要执行擦除操作,因此数据不能直接在相同的位置更新。当一个页中数据需要更新时,必须将该页中有效数据拷贝到其他空闲页上再更新,并将原来页上的数据置为无效。随着时间的推移,许多无效页累积在存储器中使得空闲页逐渐减少。当存储器中的空闲空间不足时,启动垃圾回收操作,利用回收块选择机制从待回收块中选取满足要求的块来擦除,从而得到足够的空闲空间。NAND Flash中块的擦除次数有限,通常为10 000次~100 000次[2]。当某个块的擦除次数超过使用寿命时,该块将无法正常用于数据存储。因此,垃圾回收应利用合理的回收块选择机制,从待回收块中找到回收后能产生良好磨损均衡效果且付出较少额外代价的块来回收,从而获得足够的空闲空间用于数据更新操作。 2 Yaffs2在磨损均衡方面的缺陷 Yaffs2中回收块的选择机制[3]是从待回收块中找到有效数据最少的块来回收。回收过程中,Yaffs2能够减少有效数据的额外读和写操作。当数据更新处于均匀分布的情况下,Yaffs2表现出较好的磨损均衡效果。 但是,通常情况下数据的更新频率不同,有些数据经常更新,而有些数据很少更新。经

2-Linux

Linux-2.6.32.2内核在mini2440上的移植(二)---yaffs2文件系统移植 移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 2.1, yaffs2文件系统移植 【1】获取yaffs2 源代码 现在大部分开发板都可以支持yaffs2 文件系统,它是专门针对嵌入式设备,特别是使用nand flash 作为存储器的嵌入式设备而创建的一种文件系统,早先的yaffs 仅支持小页(512byte/page)的nand flash,现在的开发板大都配备了更大容量的nand flash,它们一般是大页模式的(2K/page),使用yaffs2 就可以支持大页的nand flash,下面是yaffs2 的移植详细步骤。 在https://www.wendangku.net/doc/c613498891.html,/node/346可以下载到最新的yaffs2 源代码,需要使用git工具( 安装方法见Git版本控制软件安装与使用),在命令行输入: [root@localhost ~]# cd ./linux-test [root@localhost linux-test]# git clone git://https://www.wendangku.net/doc/c613498891.html,/ya ffs2 Cloning into yaffs2... remote: Counting objects: 6592, done. remote: Compressing objects: 100% (3881/3881), done. remote: Total 6592 (delta 5237), reused 3396 (delta 2642) Receiving objects: 100% (6592/6592), 3.34 MiB | 166 KiB/s, d one. Resolving deltas: 100% (5237/5237), done.

51单片机spi驱动sd卡程序

AT89C52单片机驱动SD卡系统设计 本文详细阐述了用AT89C52单片机对SD卡进行操作的过程,提出了一种不带SD卡控制器,MCU读写SD卡的方法,实现了SD卡在电能监测及无功补偿数据采集系统中的用途。 长期以来,以Flash Memory为存储体的SD卡因具备体积小、功耗低、可擦写以及非易失性等特点而被广泛应用于消费类电子产品中。特别是近年来,随着价格不断下降且存储容量不断提高,它的应用范围日益增广。当数据采集系统需要长时间地采集、记录海量数据时,选择SD卡作为存储媒质是开发者们一个很好的选择。在电能监测以及无功补偿系统中,要连续记录大量的电压、电流、有功功率、无功功率以及时间等参数,当单片机采集到这些数据时可以利用SD作为存储媒质。本文主要介绍了SD卡在电能监测及无功补偿数据采集系统中的应用方案 设计方案 应用AT89C52读写SD卡有两点需要注意。首先,需要寻找一个实现AT89C52单片机与SD卡通讯的解决方案;其次,SD卡所能接受的逻辑电平与AT89C52提供的逻辑电平不匹配,需要解决电平匹配问题 通讯模式 SD卡有两个可选的通讯协议:SD模式和SPI模式。SD模式是SD卡标准的读写方式,但是在选用SD模式时,往往需要选择带有SD卡控制器接口的MCU,或者必须加入额外的SD卡控制单元以支持SD卡的读写。然而,AT89C52单片机没有集成SD卡控制器接口,若选用SD模式通讯就无形中增加了产品的硬件成本。在SD卡数据读写时间要求不是很严格的情况下,选用SPI模式可以说是一种最佳的解决方案。因为在SPI模式下,通过四条线就可以完成所有的数据交换,并且目前市场上很多MCU都集成有现成的SPI接口电路,采用SPI模式对SD卡进行读写操作可大大简化硬件电路的设计。 虽然AT89C52不带SD卡硬件控制器,也没有现成的SPI接口模块,但是可以用软件模拟出SPI总线时序。本文用SPI总线模式读写SD卡。 电平匹配 SD卡的逻辑电平相当于3.3V TTL电平标准,而控制芯片AT89C52的逻辑电平为5V CMOS电平标准。因此,它们之间不能直接相连,否则会有烧毁SD卡的可能。出于对安全工作的考虑,有必要解决电平匹配问题。 要解决这一问题,最根本的就是解决逻辑器件接口的电平兼容问题,原则主要有两条:一为输出电平器件输出高电平的最小电压值,应该大于接收电平器件识别为高电平的最低电压值;另一条为输出电平器件输出低电平的最大电压值,应该小于接收电平器件识别为低电平的最高电压值。 一般来说,通用的电平转换方案是采用类似SN74ALVC4245的专用电平转换芯片,这类芯片不仅可以用作升压和降压,而且允许两边电源不同步。但是,这个方案代价相对昂贵,而且一般的专用电平转换芯片都是同时转换8路、16路或者更多路数的电平,相对本系统仅仅需要转换3路来说是一种资源的浪费。 考虑到SD卡在SPI协议的工作模式下,通讯都是单向的,于是在单片机向

93c66与spi驱动程序

SPI总线在单片机系统中的实现 2007-04-28 10:56 来源:mcuzb //-----------------------函数声明,变量定义------------------------------------------#include #include sbit SCK=P1^0; // 将p1.0口模拟时钟输出 sbit MOSI=P1^1; // 将p1.1口模拟主机输出 sbit MISO=P1^2; // 将p1.2口模拟主机输入 sbit SS1=P1^3; // 将p1.3口模拟片选 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; //-----------------------------------------------------------------------------------// 函数名称: SPISendByte // 入口参数: ch // 函数功能:发送一个字节 //-----------------------------------------------------------------------------------void SPISendByte(unsigned char ch) { unsigned char idata n=8; // 向SDA上发送一位数据字节,共八位 SCK = 1 ; //时钟置高 SS1 = 0 ; //选择从机 while(n--) { delayNOP(); SCK = 0 ; //时钟置低 if((ch&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1 { MOSI = 1; // 传送位1 } else { MOSI = 0; // 否则传送位0 } delayNOP(); ch = ch<<1; // 数据左移一位 SCK = 1 ; //时钟置高 } } //-----------------------------------------------------------------------------------// 函数名称: SPIreceiveByte

使用yaffs2img工具制作Android刷机包教程

制作刷机包 打开‘yaffs2img浏览器’,点击左上角的‘选取yaffs2文件’选择你刚刚复制出来的 files文件夹里的system.img 先来认识一下这个软件 1.定制软件的提取(此部和制作刷机包没关系,可以不做,想用官方软件的同学可以 看看) 选择app,右键你想要提取软件,提取就可以了,我是把整个app文件夹提取出来了,不用 的软件直接删掉好了 2.定制软件的精简 在你不想要用的软件上直接右键,删除,就好了,你也可以右键添加你想要用的软件,得把

软件改成比较简短的英文名,否则有可能不能用 秀一下我精简后的列表,大家可以参照着精简 https://www.wendangku.net/doc/c613498891.html,uncher文件的替换 下载好你想要用的桌面软件,改名为‘Launcher’,删掉app中的‘Launcher2’,添加进去你改好名字的‘Launcher’就好了,我比较喜欢ADW,所以我把ADW的文件名改为 Launcher,替换掉原来的Launcher2就好了 4.破音问题的解决 在左边导航点选‘etc’,右键添加文件,把附件中的声音配置文件解压出来 ‘AudioFilter.csv’添加进去就好了 AudioFilter.rar (355 Bytes)

5.字体的更改 下载字体文件,中文字体库一律把名字改名为‘DroidSans Fallback.ttf’,英文字体改为‘DroidSans.ttf ’,加粗的英文字体改为‘DroidSans-Bold.ttf ’然后再左边导航栏点选‘fonts’,把之前自带的字体删除,然后把你改好名字的字体添加进去就好了把国产机皇的字体也分享给大家,中文+英文+英文加粗 6.开机音乐和照相机音乐的删除 在导航栏点选‘media’,在audio/ui文件夹下,删除‘Bootsound.mp3’(开机音乐)和

Linux下SPI驱动测试程序

Linux下的SPI总线驱动(一)2013-04-12 15:08:46 分类:LINUX 版权所有,转载请说明转自一.SPI理论介绍 SPI总线全名,串行外围设备接口,是一种串行的主从接口,集成于很多微控制器内部。和I2C使用2根线相比,SPI总线使用4根线:MOSI (SPI 总线主机输出/ 从机输入)、MISO (SPI总线主机输入/从机输出)、SCLK(时钟信号,由主设备产生)、CS(从设备使能信号,由主设备控制)。由于SPI总线有专用的数据线用于数据的发送和接收,因此可以工作于全双工,当前市面上可以找到的SPI外围设备包括RF芯片、智能卡接口、E2PROM、RTC、触摸屏传感器、ADC。 SCLK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCLK 时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCLK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI 设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C 系统要稍微复杂一些。 二.SPI驱动移植 我们下面将的驱动的移植是针对Mini2440的SPI驱动的移植 Step1:在Linux Source Code中修改arch/arm/mach-s3c2440/文件,加入头文件:#include #include <../mach-s3c2410/include/mach/> 然后加入如下代码: static struct spi_board_info s3c2410_spi0_board[] = { [0] = { .modalias = "spidev", us_num = 0, hip_select = 0, rq = IRQ_EINT9, ax_speed_hz = 500 * 1000, in_cs = S3C2410_GPG(2), .num_cs = 1, us_num = 0, pio_setup = s3c24xx_spi_gpiocfg_bus0_gpe11_12_13, odalias = "spidev",

第2天 linux系统的编译及镜像文件的制作

第2天linux系统的编译及镜像文件的制作 一般来说,linux系统分为几个映像。 一:bootload :一般常用的是 U-boot 二:内核映像:主要是linux内核编译成的映像比如TQ210开发板使用的zImage.bin 三:文件系统:有很多格式,比如 下面根据TQ210说明书进行讲解,大部分参考官方手册。以后自己修改源码可以在此基础上进行修改,修改完以后按照此步骤进行编译,编译完成后进行下载到开发板进行运行 1编译bootloader 1.1光盘中的 u-boot 源码的解压 先将光盘中的 u-boot 源码 ( 在光盘的“ TQ210_CD\bootloader\ ” 目录下 , 名为 uboot_TQ210_1.3.4_V1.1.tar.bz2)拷贝到 PC 的linux系统的根目录(这里说的根目录是本手册编写者的操 作和截图所拷贝的地方, 实际操作可以拷贝到任意目录下) 下, 然后使用命令#tar xvfjuboot_TQ210_1.3.4_V1.1.tar.bz2 -C /,解压源码,如下图所示 源码解压后,会在“/opt/EmbedSky/TQ210/uboot_TQ210_1.3.4/”目录下得到刚刚解压的源码。 1.2 光盘中的u-boot源码的编译 解压完成后,使用命令#make TQ210_config,配置u-boot,如下图所示:

使用命令#make,编译u-boot。编译结束后,在/opt/EmbedSky/TQ210/uboot_TQ210_1.3.4/目录下会得 到一个名字u-boot.bin的镜像,将其拷贝到Windows 或者拷贝到TFTP 服务器发送文件指定的目录中,就 可以烧写到开发板上面进行测试了(或者制作成SD 启动卡也可以测试)。如下两图所示:

SPI接口详细说明

SPI 串行外设接口总线,最早由Motorola提出,出现在其M68系列单片机中,由于其简单实用,又不牵涉到专利问题,因此许多厂家的设备都支持该接口,广泛应用于外设控制领域。 SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照Motorola的SPI接口定义来设计的。但正因为没有确切的版本协议,不同家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法直接互连(需要软件进行必要的修改)。 虽然SPI接口的内容非常简单,但本文仍将就其中的一些容易忽视的问题进行讨论。 SPI ( Serial Peripheral Interface ) SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。 时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI 接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。 SPI接口信号线 SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。 设备选择线SS-(Slave select,或CS-)

SS-线用于选择激活某Slave设备,低有效,由Master驱动输出。只有当SS-信号线为低电平时,对应Slave设备的SPI接口才处于工作状态。 SCLK:同步时钟信号线, SCLK用来同步主从设备的数据传输,由Master驱动输出,Slave设备按SCK的步调接收或发送数据。 串行数据线: SPI接口数据线是单向的,共有两根数据线,分别承担Master到Slave、Slave到Master的数据传输;但是不同厂家的数据线命名有差别。 Motorola的经典命名是MOSI和MISO,这是站在信号线的角度来命名的。 MOSI:When master, out line; when slave, in line MISO:When master, in line; when slave, out line 比如MOSI,该线上数据一定是Master流向Slave的。因此在电路板上,Master的MOSI引脚应与Slave的MOSI引脚连接在一起。双方的MISO也应该连在一起,而不是一方的MOSI连接另一方的MISO。 不过,也有一些产家(比如Microchip)是按照类似SDI,SDO的方式来命名,这是站在器件的角度根据数据流向来定义的。 SDI:串行数据输入 SDO:串行数据输出 这种情况下,当Master与Slave连接时,就应该用一方的SDO连接另一个方的SDI。 由于SPI接口数据线是单向的,故电路设计时,数据线连接一定要正确,必然是一方的输出连接另一方的输入。 其实这个问题本来很简单的,但由于不同厂家产品的命名习惯可能不同,因此还需小心,以免低级出错。 数据传输的时序模式

S3C2440的Linux内核移植和yaffs2文件系统制作

L i n u x内核移植和根文件系统制作 第一章移植内核 (2) 1.1 Linux内核基础知识 (2) 1.1.1 Linux版本 (2) 1.1.2 什么是标准内核 (2) 1.1.3 Linux操作系统的分类 (3) 1.1.4 linux内核的选择 (4) 1.2 Linux内核启动过程概述 (5) 1.2.1 Bootloader启动过程 (5) 1.2.2 Linux启动过程 (7) 1.3 Linux内核移植 (10) 1.3.1 移植内核和根文件系统准备工作 (10) 1.3.2 修改Linux源码中参数 (11) 1.3.3 配置Linux内核 (15) 1.3.4、编译内核 (17) 第二章制作根文件系统 (19) 2.1 根文件系统预备知识 (19) 2.2、构建根文件按系统 (19) 2.2.1、建立根文件系统目录 (19) 2.2.2、建立动态链接库 (21) 2.2.3 交叉编译Bosybox (21) 2.2.4 建立etc目录下的配置文件 (24) 2.2.5 制作根文件系统映像文件 (26) 第三章启动系统 (27) 第四章总结 (34)

第一章移植内核 1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起。 1.1.1 Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PA TCHLEVEL = 6 SUBLEVEL = 29 EXTRA VERSION = .1 其中的“VERSION”和“PA TCHLEVEL”组成主版本号,比如 2.4、2.5、2.6等,稳定版本的德主版本号用偶数表示(比如2.6的内核),开发中的版本号用奇数表示(比如2.5),它是下一个稳定版本内核的前身。“SUBLEVEL”称为次版本号,它不分奇偶,顺序递增,每隔1~2个月发布一个稳定版本。“EXTRA VERSION”称为扩展版本号,它不分奇偶,顺序递增,每周发布几次扩展本版号。 1.1.2 什么是标准内核 按照资料上的习惯说法,标准内核(或称基础内核)就是指主要在https://www.wendangku.net/doc/c613498891.html,/维护和获取的内核,实际上它也有平台属性的。这些linux 内核并不总是适用于所有linux支持的体系结构。实际上,这些内核版本很多时候并不是为一些流行的嵌入式linux系统开发的,也很少运行于这些嵌入式linux 系统上,这个站点上的内核首先确保的是在Intel X86体系结构上可以正常运行,它是基于X86处理器的内核,如对linux-2.4.18.tar.bz2的配置make menuconfig 时就可以看到,Processor type and features--->中只有386、486、586/K5/5x86/6x86/6x86MX、Pentium-Classic、Pentium-MMX、Pentium-Pro/Celeron/Pentium-II、Pentium-III/Celeron(Coppermine)、Pentium-4、K6/K6-II/K6-III 、Athlon/Duron/K7 、Elan 、Crusoe、Winchip-C6 、Winchip-2 、

(课程总结)

《嵌入式系统案例分析与设计》 课程实验报告 班级: 学号: 姓名: 指导老师: 成绩:

嵌入式系统案例分析与设计课程实验报告 一、开发环境的构建 1. 交叉工具链arm-linux-gcc安装与设置 (1)首先在家目录下创建一个文件夹,然后继续在该文件夹目录下创建一个test文件夹,如下图所示: (2)将交叉编译工具链Linux4.6.1拷到test目录下并解压 解压: tar -xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz (3)添加环境变量 PATH 决定了shell将到哪些目录中寻找命令或程序 配置编译环境路径在控制台下输入vim /etc/profile 在文件最后一行添加下面语句:export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin (4)保存关闭后,重启,用root账号重新登录系统,刚刚添加的环境变量生效,在控制台输入:arm-linux-gcc -v 如果安装成功将会输出arm-linux-gcc的版本号。如下图所示,显示gcc version 4.5.1 ,表示交叉编译工具链安装成功。

2. 设置TFTP服务器 (1)运行下面的命令,安装TFTP服务器和客户端# apt-get install tftpd-hpa tftp-hpa (2)运行下面的命令,重启TFTP服务器 # service tftpd-hpa restart

(3)新建一个文件,并将其移动到TFTP服务器的默认上传下载目录 (4)从服务器上下载test.txt文件,并退出tftp程序 (5)运行如下命令,确认下载的文件内容正确 3. 设置NFS服务器 (1)安装NFS服务器 # apt-get install nfs-kernel-server (2)运行下面的命令,创建一个目录,并在该目录下创建一个文件mkdir /nfs chown root /nfs chgrp root /nfs mkdir /nfs/rootfs echo "nfs test" > /nfs/rootfs/test.txt (3)编辑/ect/exports配置文件。 gedit /etc/exports

yaffs2制作教程

Yaffs2根文件系统制作 环境: 交叉编译环境:4.3.3 (天嵌科技提供,存放路径/opt/EmbedSky/4.3.3)开发平台:TQ2440 1,编译busybox 获取busybox源码 busybox-1.17.2.tar (https://www.wendangku.net/doc/c613498891.html,/downloads/)置于目录/opt/embed下 #tar jxvf busybox-1.17.2.tar.bz2 #cd busybox-1.17.2 #vim Makefile 将164行改为CROSS_COMPILE = arm-linux- 将190行改为ARCH = arm 保存推出进入配置菜单 #make menuconfig 采用默认配置保存推出 #make #make install 在busybox-1.17.2的根目录下出现了一个_install目录在该目录下又有三个目录文件bin sbin usr 和一个链接文件 linuxrc 。 2,创建根文件系统必要的目录 回到/opt/embed目录下创建根文件系统必要的目录 #mkdir root_fs #cd root_fs 将刚才生成的三个目录bin sbin usr和一个链接文件linuxrc考到目录root_fs下

#cp -rf ../busybox-1.17.2/_install/* ./ #mkdir dev etc home lib mnt opt proc root sys tmp var 创建几个必要的二级目录 #mkdir usr/lib usr/share #mkdir etc/rc.d #mkdir var/lib var/lock var/run var/tmp 3,创建必要文件 (1), 获取库文件 (我的交叉编译工具链放在目录 /opt/EmbedSky/下的) #cp -rf /opt/EmbedSky/4.3.3/arm-none-linux-gn?i/libc/armv4t/lib/* so* lib -a (2),将主机 etc 目录下的passwd、group、shadow文件拷贝到 root_fs/etc 目录下 #cp -f /etc/passwd /etc/group /etc/shadow etc 将目录/opt/embed/busybox-1.17.2/examples/bootfloppy/etc下的所有文件拷贝到 root_fs/etc下。在这个目录下有三个文件fstab, inittab, profile和一个目录init.d, 在目录init.d中有一个文件rcS。 #cp -rf ../busybox-1.17.2/examples/bootfloppy/etc/* etc 在目录etc下创建文件mdev.conf。mdev是?v的一个简化版本,我们可以通过文件mdev.conf自定义一些设备节点的名称或链接来满足特定的需要,但在此处让它为空。 #touch etc/mdev.conf (3)创建两个设备文件dev/console dev/null。 在linux内核源码文件init/main.c中有打开设备文件dev/console 的操作如下:

相关文档
相关文档 最新文档