版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西南科技大学专业方向设计报告西南科技大学信息工程学院制16方 向 设 计 任 务 书设计要求:1. 掌握Flash读写、串口通信工作机制;2. 完成相关程序设计与编写; 3.实现Flash数据回读,并通过串口调试助手显示;4.完成相应报告的编写。方 向 设 计 学 生 日 志时间设计内容11.19-11.22分析设计要求,搜集相关资料,了解FLASH通信的原理11.23-12.4系统功能分析、代码编写12.5-12.12调试、完善各项功能12.13-12.22板机调试、实现FLASH的读写12.23-12.28报告的编写方 向 设 计 评 语 表指导教师评语:成绩: 指导教师: 年 月 日基于
2、C8051F340的FLASH读写设计摘要:在电子技术研究和应用中,单片机始终是一个核心部件,单片机的应用也越来越广泛。C8051F单片机是Silicon Labs 公司研发的一系列增强型51 单片机,广泛用于工业及民用电子、消费电子。它继承了经典的传统51 的所有精华并在此基础上有重大发展。W25X80FLASH存储器具有“PCB板占用空间少”、“引脚数量少”、“功耗低“等特点。与普通串行FLASH相比,使用更灵活、性能更出色。本设计要求使用C语言完成编程设计,并实现FLASH数据回读,且要求通过串口调试助手显示。设计通过编程分步完成功能,最终达到设计要求。详细设计步骤如下:系统时钟配置、端
3、口配置、SPI通讯的初始化、初始化UART波特率、FLASH存储的初始化 FLASH的擦除、FLASH写、从FLASH中读一个数组的数据。完成程序设计后经过调试,实验结果表明该设计能够实现FLASH的读写并通过串口助手成功显示。关键词:C8051F340;SPI;UART;FLASH Abstract: In the electronic technology research and application, single chip microcontroller is always a core components, the application of single chip micr
4、ocontroller is also more and more widely. C8051F single chip microcontroller is a series of enhanced 51 single chip microcontroller which is researched by Silicon Labs company, it used widely in industry and civil electronics, consumer electronics. It inherits all essence from the classic tradition
5、of 51 single chip microcontroller and has great development on this basis. The distinguishing feature of W25X80FLASH memory is PCB board takes up less space, pin the quantity is less, and low power consumption etc. Compared with ordinary serial FLASH, it uses more neatly and has more outstanding per
6、formance. This design needs C language, achieve the Flash data back to read, and display through the serial debugging assistant. Design is completed through the programming step by step, and finally reach the design requirements. The detailed design procedure is as follows: System clock configuratio
7、n, port configuration, SPI communication initialization, initialization UART baud rate, Flash memory initialization, wipe out the FLASH, write on the Flash, read an array of data from the Flash. Complete the program design and put it through a test, the experimental results show that this design can
8、 realize FLASH literacy and show successful through the CommAssistant.Key Words: C8051F340; SPI; UART; FLASH 一、 设计目的和意义FLASH存储器又称闪存,应为其具有快速读写,可编程擦除等性能在电子领域中被广泛使用。本次课程设计目的是掌握FLASH读写、串口通信工作机制,设计相关程序实现FLASH的数据回读功能并通过串口显示。二、 设计原理1. FLASH的存储FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程的性能,还不会断电丢失数据,同时可以快速读取数据
9、。对Flash存储器的操作一般是进行读、写和擦除。FLASH存储器的擦除必须是以1KB 为单位对齐的地址并指定哪一区块被擦除,或者全部擦除。 在众多的单片机中都集成了FLASH存储器系统,该存储器系统可用作代码和数据的存储。它在整个存储器中所处的位置在最起始的位置,一般其起始地址从0开始,如图1所示。FLASH是由一组可独立擦除的1KB区块所构成的,对一个区块进行擦除将使该区块的全部内容复位为1。下面这幅图是Flash存储器的简单示意图,此图形象的体现了FLASH存储器是由1KB 区块构成,而且每个区块的基地址都固定的,其基地址如图2所示。 图1 存储器系统示意图 图 2 Flash 存储器示
10、意图 2. SPI通信SPI它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。(1)SDO主设备数据输出,从设备数据输入(2)SDI主设备数据输入,从设备数据输出(3)SCLK时钟信号,由主设备产生(4)CS从设备使能信号,由主设备控制其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。接下来就负责通讯的3根线了。通讯
11、是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。 要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据
12、,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义.SPI的原理图见图31。 图3 SPI原理图框图3. UART通信UART是一个异步、全双工串口,它提供标准8051串行口的方式1和方式3。UART具有增强的波特率发生器电路,有多个时钟源可用于产生标准波特率。接收数
13、据缓冲机制允许UART在软件尚未读取前一个数据字节的情况下开始接收第二个输入数据字节。UART有两个相关的特殊功能寄存器:串行控制寄存器(SCON0)和串行数据缓冲器 SBUF0 )。用同一个SBUF0地址可以访问发送寄存器和接收寄存器。写SBUF0时自动访问发送寄存器;读SBUF0时自动访问接收寄存器,不可能从发送数据寄存器中读数据。如UART中断被允许,则每次发送完成(SCON0中的TI0位被置1)或接收到数据字节(SCON0中的RI0位被置1)时将产生中断。当CPU转向中断服务程序时硬件不清除UART0中断标志。中断标志必须用软件清除,这就允许软件查询UART中断的原因(发送完成或接收完
14、成)。UART原理与见图41。图4 UART原理图三、 详细设计步骤1. 系统时钟配置功能描述C8051F340系统时钟的配置具体程序如下static void ClockInit( void ) INT16U iTmp; /Enable internal high speed oscillator OSCICN |= 0x83; /Enable internal 4X MULL if( !( CLKMUL & ( 15 ) ) ) CLKMUL = 0; CLKMUL = 0x00; CLKMUL |= ( 17 ); for( iTmp = 0; iTmp 200; iTmp + ); C
15、LKMUL |= ( 16 ) | ( 17 ); for( iTmp = 0; iTmp 2000; iTmp + ); while( !( CLKMUL & ( 11。2. 端口配置功能描述:初始化GPIOs具体程序如下static void GPIOInit( void )端 口 XBR1 |= ( 16 ); / 交使能交叉开关叉开关P0SKIP |= ( 10 ); / 对应位输出为 推免方式端口 I/O 初始化包括以下步骤: (1) 、用端口输入方式寄存器(PnMDIN )选择所有端口引脚的输入方式(模拟或数字)。 (2) 、用端口输出方式寄存器(PnMDOUT )选择所有端口引脚
16、的输出方式(漏极开路或推挽)。 (3) 、用端口跳过寄存器(PnSKIP )选择应被交叉开关跳过的那些引脚。(4) 、将引脚分配给要使用的外设(XBR0 、XBR1 、XBR2 )。(5) 、使能交叉开关(XBARE = 1 )。 3. SPI通讯的初始化SPI:一种3线(有的没有SS线(选择主或从机模式)或4线的通信方式:MOSI:主机出从机进数据线MISO:主机进从机从数据线SCK:时钟线SS:主从模式选择线工作过程的理解:设置好相应的配置后就可以发送或接收数据,当放送或接收完成后就会是SPIF置位,此时如果开了中断就会进入中断服务程序。如果没开中断就可以通过查询该标志位来做相应的事。进入
17、中段服务程序后,或者读(写)SPDR寄存器都可以清零SPIF标志位。从而可以开始下一次的传输相应的寄存器。(6) 、SCPR:控制寄存器:SPI的大部分设置(7) 、SPSR:标志寄存器:(查看一些标志(主要是SPIF位)和设置SPI速度)(8) 、SPDR:数据寄存器:(9) 、SS引脚的说明:(实质就是当配置为输入时:是主机还是从机由输入的电平来决定)从机模式:当SPI配置为从机时,从机选择引脚 SS 总是为输入。SS 为低将激活 SPI 接口, MISO成为输出 ( 用户必须进行相应的端口配置 ) 引脚,其他引脚成为输入引脚。当 SS 为高时所有的引脚成为输入, SPI 逻辑复位,不再接
18、收数据。SS引脚对于数据包/字节的同步非常用,可以使从机的位计数器与主机的时钟发生器同步。当SS 拉高时SPI从机立即复位接收和发送逻辑,并丢弃移位寄存器里不完整的数据。主机模式:当SPI配置为主机时 (SPCR的MSTR置位 ),用户可以决定SS引脚的方向。若SS配置为输出,则此引脚可以用作普通的I/O口而不影响SPI系统。典型应用是用来驱动从机的SS引脚。如果SS配置为输入,必须保持为高以保证SPI的正常工作。若系统配置为主机,SS为输入,但被外设拉低,则SPI系统会将此低电平解释为有一个外部主机将自己选择为从机。为了防止总线冲突, SPI系统将实现如下动作:(1) 、清零SPCR的MST
19、R位,使SPI成为从机,从而MOSI和SCK变为输入。(2) 、SPSR的SPIF 置位。若SPI中断和全局中断开放,则中断服务程序将得到执行。因此,使用中断方式处理SPI主机的数据传输,并且存在SS被拉低的可能性时,中断服务程序应该检查 MSTR 是否为 “1”。若被清零,用户必须将其置位,以重新使能SPI主机模式。具体程序如下static void SPI_Init( void )SPI0CN = 0x00;/*禁止SPI0SPI0CFG |= ( 16 ); 允许主方式 工作在主器件方式SPI0CKR = 1; system clock : 48MHz 12000KHZSPI0CN =
20、0x01; 使能SPI0 /Enable SPIXBR0 |= ( 11 ); SPII/0连接到端口引脚/strong outputP0MDOUT |= ( 11 ) | ( 12 ) | ( 13 ) | ( 16 ) | ( 17 );对应pon输出为推挽方式P1MDOUT |= ( 10 ); 对应p1输出为推挽方式P0 |= ( 11 ) | ( 12 ) | ( 13 );p0n为逻辑高电频4. 初始化UART0波特率功能描述初始化UARTO,波特率具体程序如下static void UART0_Init( void ) SCON0 = ( 14 );P0MDOUT |= ( 14
21、 ); Timer1_Init( );void Timer1_Init( void ) TH1 = 0x30; TL1 = 0x30; TCON &= 0x3f; TMOD &= 0x0F; TMOD |= ( 24 ); CKCON = 0x00;TCON |= ( 1 16 );/send address highest byte at firstSPI_ExchangeByte( addr 8 );SPI_ExchangeByte( addr 0 );SPI_CS25XXX_HIGH( );W25XXX_HOLD_LOW( );W25XXX_WP_LOW( );7. FLASH写本设计中
22、Flash写操作采用页编程方式实现,执行“页编程”指令之前,需要先执行“写使能”指令,而且要求待写入的区域位都为1,也就是需要先把待写入的区域擦除。先把/CS引脚拉低,然后把代码02h通过DIO引脚送到芯片,然后再把24位地址送到芯片,然后接着送要写的字节到芯片。在写完数 据之后,把CS引脚拉高。写完一页(256个字节)后,必须把地址改为0,不然,如果时钟还在继续,地址自动变为页的开始地址。在某些时候,需要写入的字节不足256字节的话,其它写入的字节都是无意义。如果写入的字节大于256个字节,多余的字节将会加上无用的字节覆盖刚刚写入的256个字节。所以需要保证写入的字节小雨等于256个字节。在
23、指令执行的过程中,用“读状态寄存器”可以发现BUSY位为1,当指令执行完毕,BUSY位自动变为0.如果需要写入的地址处于“写保护”状态,“页编程”指令无效3。 主要功能描述FLASH的写流程如下 (1) 、查忙(2) 、写使能(3) 、片选(4) 、页编程(5) 、发送地址(6) 、写数据具体程序如下void W25XXX_Erase( INT8U type, INT32U addr )/UnProtectFlash();W25XXX_HOLD_HIGH( );W25XXX_WP_HIGH( );W25XXX_WaitFree( );SPI_CS25XXX_LOW( );SPI_Exchang
24、eByte(WRITE_ENABLE);SPI_CS25XXX_HIGH( );SPI_CS25XXX_LOW( );switch( type )case W25XXX_ERASE_SECTOR:SPI_ExchangeByte( SECTOR_ERASE );break;case W25XXX_ERASE_BLOCK:SPI_ExchangeByte( BLOCK_ERASE );break;case W25XXX_ERASE_ALL:SPI_ExchangeByte( CHIP_ERASE );break;if( type != W25XXX_ERASE_ALL )SPI_Exchange
25、Byte( addr 16 );/send address highest byte at firstSPI_ExchangeByte( addr 8 );SPI_ExchangeByte( addr 0 );SPI_CS25XXX_HIGH( );/ProtectFlash();W25XXX_HOLD_LOW( );W25XXX_WP_LOW( );8. FLASH读读操作可分为读数据指令(03)(Read Data) 、快读指令(0Bh)(Fast Read)、快读双输出指令(3Bh)(Fast Read DualOutput).本设计中Flash读操做采用读数据方式(03)(Read D
26、ate)实现。“读数据”指令允许读出一个字节或一个以上的字节被读出。先把/CS引脚拉低,然后把03h通过DIO引脚送到芯片,之后再送入24位的地址,这些数据在CLK的上升沿被芯片采集。芯片接受完24位地址后,就会把相应地址的数据在CLK引脚的下降沿从DO引脚送出去,高位在前。当读完这个地址的数据后,地址自动增加,然后通过DO引脚把下一个地址的数据送出去,形成一个数据流。也就是说,只要时钟在工作,同行一条读指令,就可以把整个芯片存储区的数据读出来。把/CS引脚拉高,“读数据”指令结束。当芯片在执行编程、擦除和读状态寄存器指令的周期内,“读数据”指令不起作用3。流程如下(1) 、查忙(2) 、片选
27、(3) 、读数据(4) 、发送地址(5) 、读出数据具体程序如下void W25XXX_ReadArray( INT32U addr, INT8U* pBuff, INT32U length )INT32U offset;W25XXX_HOLD_HIGH( );W25XXX_WaitFree( );SPI_CS25XXX_LOW( );SPI_ExchangeByte( READ_DATA );SPI_ExchangeByte( addr 16 );SPI_ExchangeByte( addr 8 );SPI_ExchangeByte( addr 0 );for( offset = 0; of
28、fset length; offset + )*( pBuff + offset ) = SPI_ExchangeByte( 0xFF );SPI_CS25XXX_HIGH( );W25XXX_HOLD_LOW( );9. 程序主函数为了实现flash的读写并通过串口调制助手显示 程序首先经过了时钟初始化IO初始化以及SPI UART和FLASH的初始化.然后经过FLASH的擦除和写的过程,最终在串口助手上面读出,具体程序如下:unsigned char buff16; /定义一个16单元的buff缓冲区,存放unsigned char型int main( void ) /main主函数 返回
29、int unsigned char tmp;/定义unsigned char 临时变量 tmp ClockInit( ); /执行ClockInit()函数,时钟初始化 GPIOInit( );/执行GPIOInit()函数,初始化IO口 SPI_Init( );/执行SPI_Init()函数,SPI通讯的初始化UART0_Init( );/执行UART0_Init( );函数,的初始化 W25XXX_Init( );/执行W25XX_Init(),Flash存储的初始化 EA = 1;/开全局中断EA for( tmp = 0; tmp 16; tmp + )/让tmp从0到15做16下,循
30、环 bufftmp = tmp;/让buff中的单元依次从0填充到15 W25XXX_Erase( W25XXX_ERASE_ALL, 0x0000 );/调用函数,全片擦除 W25XXX_WriteArray( 0x00000000, buff, 16 );/调用函数,将buff中16字节写入,地址从0x00000000开始for( tmp = 0; tmp 16; tmp + ) /tmp从0开始循环16次(到15结束) bufftmp = 0;/让每个buff单元都为0 W25XXX_ReadArray( 0x00000000, buff, 16 );/调用函数,从0x00000000开始读16个字节到buff中for(tmp = 0; tmp 16; tmp +)SBUF0 =bufftmp;whi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工机械设备定期保养计划方案
- 山体崩塌医疗救助
- 新能源汽车维护与操作指南
- 设备故障紧急恢复运维团队预案
- 机构义务保证承诺书5篇
- 企业信息化建设规划手册
- Unit6 SectionB 2a-2e 教学设计 人教版英语八年级下册
- 2026年技术岗转管理岗能力测试题库
- 2026年企业档案工作规范与数字化管理知识试题
- 增强心理健康阳光心态六年级主题班会课件
- 化工厂人员定位施工方案
- 2025年涉企行政执法专项行动自查报告
- 2025浙江省交通投资集团有限公司内部招聘2人笔试历年典型考点题库附带答案详解试卷2套
- 2026年南阳工艺美术职业学院单招职业倾向性测试必刷测试卷及答案1套
- 涉路施工安全题库及答案解析
- 中交集团测评试题及答案
- 肾性贫血课件
- (完整版)针灸室晕针应急预案演练方案
- 起重机械作业人员考试题库及答案
- 《中华人民共和国公司法》知识考试测试题(附答案)
- 搅拌摩擦焊基础知识培训课件
评论
0/150
提交评论