第六章、Tiny4412 U-BOOT移植六 Nand Flash源码分析

w25qxx spi flash WP写保护引脚的正确使用方式 WP引脚使用方式 spi flash有一个外部写保护引脚WP, 此引脚并不是直接保护flash上的数据内容,而是保护状态寄存器不被异常改写.flash上的内容写保护是通过状态寄存器的BPxbit的不同组合来实现的. 对于环境相对恶劣的使用场景(供电不稳等.)需要对flash上的内容加以保护.整体的设计思路就是 使用状态寄存器的BPx位组合实现flash上数据内容的局部或整体写保护. 外部WP引脚的电平状态结合状态寄存器的SRP位实现状态寄存器的保护进而间接保护flash上受保护的数据内容. 通过BP.. 阅读详情

一、U-Boot参考源码 

NandFlash的初始化代码我们放在board/samsung/tiny4412/lowlevel_init.S ,这一段代码是三星SMDK4212中没有提供的,所以我们需要自己写。我们在里面增加一个函数叫nand_asm_init。当然,由于Nand Flash的操作是有一定的规律的,所以,我们可以去别的地方找一段写好的NandFlash源码,然后根据自己的电路原理图进行移植即可。

二、代码分析

1、初始化Nand Flash

打开原理图,参看原理图配置各个功能引脚----状态引脚R/nB,读使能引用脚nRE,片选信号nCE,命令使能引脚CLE,地址使能引脚ALE,写使能引脚nWE。




图6-1、NANDFlash 电路连接原理截图

搜索各个引脚的值,比如R/nB接在Xm0FRnB0上,搜索Xm0FRnB0,发现Xm0FRnB0和OND_INT0/MP02_2共用一个引脚,如上图中将各个信号线的复用引脚所示。

1.1、配置片选信号引脚

上面说过,由于各个引脚的功能都是复用的,所以需要在一些相关的寄存器中,进行设置,让其功能固定、

首先查找到nCE接在复用引脚Xm0CSn0/NF_CSn2/MP00_0上,打开Exynos4412芯片手册开始查找,妹呀!找了半天才找到这个相关的寄存器,名字叫做GPY0CON,而不是像S5PV210中叫GPYM0什么的。

如下图中所示,GPY0CON[3:0]位对应着NF_CSn2的功能,所以这一们需设置成0x03着先将这一位置0后设置,同时,对GPY0CONPDN进行设置,不使能其内部上下拉功能。


表6-1、GPY0CON寄存器设置说明

代码如下,里同我已做了相关注释。

nand_asm_init:

       /*Setting GPIO for NAND */

       /*This setting is NAND initialze code at booting time in iROM. */

       @0x11000000is the base address

       ldr   r0, =0x11000000

@ nCEset

       ldr   r1, [r0, #MP01CON_OFFSET] @0x0120 is GPY0CONregister

       bic   r1, r1, #0xf              @(0xf<<8) set zero

       orr   r1, r1, #0x3              @(0x3<<8)  set nCE chip enable

       str    r1, [r0, #MP01CON_OFFSET]

@setEBI_WEn EBI_OEn nCE/NF_CSN[2]

       ldr   r2, =0x220003

       str    r2, [r0, #MP01CON_OFFSET]

 

 

表6-2、GPY0PUD寄存器设置说明

我们的nCE片选信号是低电平有效,在电路图中,像我们的三星的原理图中,nXX表示低电平有效,而在TI的芯片手册中,XXn表示低电平有效,比如,上面的芯片手册中nCE表示低电平有效,而在TI的芯片手册中,则是CEn,表示的也是低电平片选信号有效,反正看到带n的引脚,即表示低电平有效。

接着使能,将其最后两位清零:

@ 0x0 =Disables Pull-up/Pull-down ///nCE is disable

       ldr   r1, [r0, #MP01PUD_OFFSET] @0x128 is

       bic   r1, r1, #0x3

       str    r1, [r0, #MP01PUD_OFFSET]

1.2、配置CLE/ALE/nWE/nRE/R/nB引脚

除开nCE引脚,其余的几个引脚都是复用的寄存器是6.2.3.55GPY2CON,可以查看其寄存器主明进行配置如下。其相关位置0x0160。其配置代码如下,代码中我已做了相关注释,这里不在截图说明。

ldr    r1, [r0, #MP03CON_OFFSET]  

bic    r1, r1, #0xFFFFFF  

ldr    r2, =0x22222222  

orr    r1, r1, r2  

str    r1, [r0, #MP03CON_OFFSET]  

将PortGroup MP0_3 Control Register的0-23位全部清为0

PortGroup MP0_3 Control Register (MP0_3PUD, R/W, Address = 0xE020_0328)

 

@MP03CON_OFFSET'soffset is 0x160

       ldr   r1, [r0, #MP03CON_OFFSET]

@cleanto zero

       bic   r1, r1, #0xFFFFFF

@setNF_CLE/NF_ALE/NF_RnB0

       ldr   r2, =0x222

       orr   r1, r1, r2

       str    r1, [r0, #MP03CON_OFFSET]

@disenablethe pull-up/pull-down

       ldr   r1, [r0, #MP03PUD_OFFSET]

       ldr   r2, =0x3fff

       bic   r1, r1, r2

       str    r1, [r0, #MP03PUD_OFFSET]

1.3、配置Nandf Flash控制器的寄存器NFCONF

这些寄存器的设置在chapter20大家可以去那里开始搜吧。

NandFlash Configuration Register (NFCONF, R/W, Address =0x0CE0_0000)

先看最前面四位[3:0]

表6-3、NFCONF寄存器设置说明

[0]位保留,置为0。

[1]用来配置页的一个地址周期,这款K9GAG08U0E的page是8K,那么地址周期是多少,再去K9GAG08U0E的芯片手册,看到第P9页,如下表5-4所示:

表6-4、地址发送时序说明表


可见,其地址周期为5th,所以[1]配为1。

接着看[3:2],这两位是配置页面大小的,怎么看也没有8k的嘛,不会是友善公司搞错了吧,搞了个不兼容的芯片,怪不没有焊接上,而是用eMMC呢,不过Flash外部引脚很多都是可以兼容的,找一片能兼容的来替代K9GAG08U0E也应是可以的,只是要根据新的芯片手册来设置这几个值了。不过手册上这一位里也有说明,就是NFCON不考虑实际的Flash的页面大小,由软件去负责处理,这么说,难道也是可以的,这里暂时先不管,将共设置成4K,所以这一位设置成10。所以前四位配置为--1010。

OK,继续配置。

 表6-5、NFCONF寄存器设置说明


上面,多出了两个不认识的东西TWRPH1和TWRPH0。查看一下芯片手册上的NANDFLASH MEMORY TIMING,在P1120页有下图6-2。

图6-2、CLE等信号时序说明图


TACLS:当将CLE和ALE拉高以后,再过多少时间才能发出写使能信号(nWE)

TWRPH0:nWE使能持续时间,信号被拉低的时间,即信号nWE的有效时间

TWRPH1:当将CLE和ALE拉高以后,WE使能,这时,后面开始发数据,那么这段数据起作用的时间(Datahold time)即是TWRPH1

TACLS是发给NANDFLASH的,所以去查看K9GAG08U0E的芯片手册,打开P27页,并没有显示出来CLE拉高后,经过多少时间nWE,将WE的信号拉低,根据下面的时序图5-3显示。

图6-3、NAND FLASH 时序图


打开K9GAG08U0E的芯片手册,在P19页查找到各个pin脚在各个状态下的最小时间如下表5-6所示

表6-6、NANDFLASH 时序图时间表


 

OK,至此,三个最小时间查出来了,串口通讯中最麻烦的就是时序,OK,整理数据

TACLS= tCLS-tWP = 15 -15 =0

TWRPH0= tWP = 15

TWRPH1= tDH = 5

OK,现在再返回去看NFCONF寄存器里这几个bit的一个计算公式:

这里Tiny4412的NandFlash的HCLK频率为133MHz(P363页),NFCON属于HCLKD0= 133MHz,T = 1/133 = 7.5ns

TACLS:配置1,算出时间为7.5*(1)=7.5ns >0ns

TWRPH0:配置3,算出时间为7.5*(3+1)=30ns >15ns

TWRPH1:配置0,算出时间为7.5*(0+1)=7.5ns >5ns

当然这个几个值的设置,还需实际的测试试试,如果配置成最小值,有可能出现NandFlash无法读写的情况,这里我们还是参考提供的NandFlash的裸机的参考代码,将这三位配成7-7-7或者1-4-1。

TACLS:配置0,算出时间为7.5*7=52.5ns >0ns

TWRPH0:配置1,算出时间为7.5*(7+1)=60ns >15ns

TWRPH1:配置0,算出时间为7.5*(7+1)=60ns >5ns

 

OK,符合我们的最小时序的要求,所以[7:4] 7,[11:8] 7,[12:15] 7。

@setNFCONF  chapter 20

@ELFIN_NAND_BASE  = ELFIN_NAND_BASE

       ldr   r0, =ELFIN_NAND_BASE

       ldr   r1, [r0, #NFCONF_OFFSET]      

       ldr   r2, =0x7772

       bic   r1, r1, r2

@NFCONF_VAL(7<<12)|(7<<8)|(7<<4)|(0<<3)|(1<<2)|(1<<1)|(0<<0)

       ldr   r2, =NFCONF_VAL

       orr   r1, r1, r2

       str    r1, [r0, #NFCONF_OFFSET]

ECC我们保持其初始值0,即1bitECC,其余的全部配置为0,OK,到此,全部位配置完成。

 

1.4、配置CONTROL REGISTER 

表6-7、NFCONF寄存器设置说明


20.6.2.2NFCONT 

    BaseAddress: 0x0CE0_0000

      Address = Base Address + 0x0004, ResetValue = 0x00C1_00C6

第[0]位,让NANDFlash控制器Enable,这里设置为1。使能意思就是生效的意思。剩下的几位,我没有设置,NandFlash也没有出现问题,不过,为了谨慎期间,还是要参考用三星的提供的参考代码,全部设置上。OK,代码整理一下

@NFCONT_VALNFCONT_VAL (0<<18)|(0<<17)|(0<<16)|(0<<10)|(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0x3<<1)|(1<<0)

       ldr   r1, [r0, #NFCONT_OFFSET]

       ldr   r2, =0x6

       bic   r1, r1, r2

       ldr   r2, =NFCONT_VAL

       orr   r1, r1, r2

       str    r1, [r0, #NFCONT_OFFSET]

@  why set nCE again

       ldr   r1, [r0, #MP01CON_OFFSET]

       bic   r1, r1, #0xF    @(0xf<<8)

       orr   r1, r1, #0x3    @(0x3<<8)

       str    r1, [r0, #MP01CON_OFFSET]

       mov pc, lr// function return

OK,至此NandFlash的低级初始化完成,代码整理如下:

/*************************************addby zth**************************/

/*

 *Nand Interface Init for SMDKC100

 */

       .globlnand_asm_init

nand_asm_init:

       /*Setting GPIO for NAND */

       /*This setting is NAND initialze code at booting time in iROM. */

       @0x11000000is the base address

       ldr   r0, =0x11000000

@ nCE set

       ldr   r1, [r0, #MP01CON_OFFSET] @0x0120 is GPY0CONregister

       bic   r1, r1, #(0xf<<8)         @(0xf) set zero

       orr   r1, r1, #(0x3<<8)         @(0x3) set nCE  chip enable

       str    r1, [r0, #MP01CON_OFFSET]

@set EBI_WEn EBI_OEn nCE/NF_CSN[2]

       ldr   r2, =0x220300             @=0x220003

       str    r2, [r0, #MP01CON_OFFSET]

@ 0x0 = Disables Pull-up/Pull-down///nCE is disable

       ldr   r1, [r0, #MP01PUD_OFFSET] @0x128 is

       bic   r1, r1, #(0x3<<4)        @#0x3

       str    r1, [r0, #MP01PUD_OFFSET]

@MP03CON_OFFSET's offset is 0x160

       ldr   r1, [r0, #MP03CON_OFFSET]

@clean to zero

       bic   r1, r1, #0xFFFFFF

@set NF_CLE/NF_ALE/NF_RnB0

       ldr   r2, =0x222

       orr   r1, r1, r2

       str    r1, [r0, #MP03CON_OFFSET]

@disenable the pull-up/pull-down

       ldr   r1, [r0, #MP03PUD_OFFSET]

       ldr   r2, =0x3fff

       bic   r1, r1, r2

       str    r1, [r0, #MP03PUD_OFFSET]

/*******************************************/

@set NFCONF  chapter 20

@ELFIN_NAND_BASE  = ELFIN_NAND_BASE

       ldr   r0, =ELFIN_NAND_BASE

       ldr   r1, [r0, #NFCONF_OFFSET]      

       ldr   r2, =0x7772

       bic   r1, r1, r2

@NFCONF_VAL(7<<12)|(7<<8)|(7<<4)|(0<<3)|(1<<2)|(1<<1)|(0<<0)

       ldr   r2, =NFCONF_VAL

       orr   r1, r1, r2

       str    r1, [r0, #NFCONF_OFFSET]

@NFCONT_VAL NFCONT_VAL (0<<18)|(0<<17)|(0<<16)|(0<<10)|(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0x3<<1)|(1<<0)

       ldr   r1, [r0, #NFCONT_OFFSET]

       ldr   r2, =0x6

       bic   r1, r1, r2

       ldr   r2, =NFCONT_VAL

       orr   r1, r1, r2

       str    r1, [r0, #NFCONT_OFFSET]

@ why set nCE again

       ldr   r1, [r0, #MP01CON_OFFSET]

       bic   r1, r1, #(0xf<<8)   @(0xf)

       orr   r1, r1, #(0x3<<8)   @(0x3)

       str    r1, [r0, #MP01CON_OFFSET]

       mov pc, lr      @ function return

/*************************************addby zth**************************/ 
tiny4412 uboot 2020.10版本移植(四)——uboot修改支持sd卡、eMMC引导内核及其他一些杂项设置 本文描述了在《tiny4412 uboot 2020.10版本移植(三)——uboot初步启动》 的基础上继续向tiny4412 uboot 2020.10版添加的各种功能。 一、串口设置 1.1. 把早期的uart debug关掉: 默认配置文件configs/tiny4412_defconfig去掉: CONFIG_DEBUG_UART = y CONFIG_DEBUG_UART_BASE=0x13800000 CONFIG_DEBUG_UART_CLOCK=100000000 CONFIG_D 阅读详情

相关推荐

tiny4412uboot源码

exynos4412开发板ADK1312uboot的源码,下载直接编译就可以了

Nand Flash调试日志(5)——GPIO口的配置

GPIO的配置 是 软件与硬件的联接点!!! 因为首次进行此类设计的原故,对于Flash及CPU的功能特性不是太熟悉,因此第一版设计后为Flash的AL、CL、E#、RB#四个功能pin脚连接到普通的GPIO口,并将其都设置为作为普通的GPIO口的特性。 根据的是《STR910FAW32》芯片手册中的Table 5. Device pin description来对此四个口进行配置,都选择...

竹醉春风 840

友善之臂Tiny4412的U-boot源码

u-boot源码适用于友善之臂Tiny4412

Hynix Nand Flash WP问题

  之前做项目一直没有留意NAND的写保护问题,一般就随便找个IO来控制,最近几个项目口线比较紧张,于是将WP拉到电源上了,于是...出问题了.....  先是客户反应文件会在使用过程中损坏,(怎么可能?在这个过程中并没有任何的写动作,当然,正常情况下没有写动作)而且几率很高,常温下老化一段时间就会出问题,天哪,这在以前可是从来没碰到,这可是致命的问题.问了另外几家客户,并没有发现此类问题,他们使

fanoble的专栏 3742

rk3326 MIPI休眠唤醒黑屏有背光问题

** 1.问题现象: ** **【开机起来】**开机起来可以正常显示 **【按power按键休眠】**第二次按下Power按键进入休眠,隔10s,再按Power按键唤醒。 **【出现结果】**屏幕黑屏有背光,并提示drm time out错 **【lcd信息】**lcd为480*800 2lane的mipi **【复现概率】**第二次按下休眠唤醒必然复现 【具体错误log如下】 //第一次休眠的log// [ 54.858511] dw-mipi-dsi ff450000.dsi: final DSI-

Ian22l的博客 3944

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3182

NAND FLASH学习笔记之nand flash基础(三)

(4)nand flash的操作方法 1、命令字 NAND Flash的读取和烧录以(page)页为基础,擦除以块为单位。那么,在NANDFlash上有三种基本的操作:读取一个页, 烧录一个页和擦除一个块,这三个基本操作有各自的命令序列。 实际上,大多数NAND Flash除提供了这三个基本操作外,还提供了很多其他的操作及操作命令序列,如:MT29F32G08CBACA就提供

中华田园犬 1万+

海思Hi3516DV300实战:从yolov5模型训练到Sort跟踪算法的完整部署流程

本文详细介绍了在海思Hi3516DV300芯片上部署YOLOv5目标检测与Sort多目标跟踪算法的完整流程。内容涵盖从特定场景数据训练YOLOv5模型、模型格式转换(PyTorch到ONNX再到Caffe),到利用海思NNIE引擎生成WK模型并进行端侧集成与优化的全链路实战经验,旨在解决嵌入式设备上实时人流量统计等实际应用挑战。

weixin_29034963的博客 339

S5PV210 NAND Flash

NAND Flash 关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Flash的读写擦除等3) 8bit的总线4) 支持SLC和MCL的NAND Flash5) 支持1/4/8/12/16bit的ECC6) 支持以字节/半字/字为单位访问数据/ECC寄存器,以字为单位访问其他寄存...

weixin_33796177的博客 320

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法,其优势是减少插值误差(特别是龙格现象:表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。

平和少年的博客 1647

保姆级教程:用杰理701N可视化SDK搞定ANC降噪配置(从工具到代码全流程)

本文提供了一份详细的杰理701N可视化SDK配置ANC降噪功能的教程,涵盖从开发环境搭建到代码集成的全流程。通过图形化工具和代码示例,帮助开发者快速掌握ANC参数配置技巧,优化降噪效果,解决常见问题。

weixin_30616969的博客 451

Nand Flash之并行与串行

串行Flash与并行Flash 之前我们有讲到NAND Flash与NOR Flash的封装、读取速率、写速率和电路设计等方面的差异,现在我们将会讲到并行与串行Flash,主要是串行吧,并行需要讲的很少。 因为串行与并行主要区别在于IO口的数量上,因为有些场景上我不会用到那么大的容量,E而且也不会有那么多的IO引脚,所以串行NOR与NAND Flash应运而生。 并行与串行NAND Flash S...

LUOHUATINGYUSHENG的博客 1万+

GIS常用坐标系简介

EPSG:4326是基于WGS 84的地理坐标系,使用经纬度表示,适用于全局定位和地理数据表示。它的缺点是在进行距离、面积计算等地理分析时不够准确。EPSG:3857是投影坐标系,使用平面米坐标表示,适用于在线地图展示,特别适合 Web 地图应用。虽然它在地图展示中很高效,但由于投影引起的变形问题,它不适合高精度地理测量和计算。

weixin_59096287的博客 1977

Tiny210(S5PV210) U-BOOT(五)----Nand Flash源码分析

1.u-boot参考源码  Nand Flash的初始化代码在board/samsung/tiny210/lowlevel_init.S  2.初始化Nand Flash 在u-boot中,Nand的低级初始化在lowlevel_init.S中的nand_asm_init函数中。打开原理图,配置各个功能引脚----状态引脚R/nB, 读使能引用脚nRE, 片选信号nCE, 命令使能引脚C

南山一梦 3168

震惊!用刚发布的GPT-5写研究现状,文献综述写作一整个大逆袭(附步骤+10条AI提示词)

每类分别给出:国内重点(3 条)、国外重点(3 条)、代表性方法(2–3 条)、代表成果(各 1–2 条)、主要问题(2 条)。每个场景给出:技术方案(2–3 种)、研究目标、实际成效/案例、当前挑战(3 点)。指令:基于国内外现状,系统列出当前学界的研究空白、关键未解问题与争议焦点(每项配简要证据/示例),并针对每个空白提出 1–2 条可行的研究方向或方法路径。三、差异与研究空白分析(≥300 字)。对每个小节提供:小标题、中心论点(1 句)、拟写要点(3–5 条)、建议引用类型(理论/方法/案例)。

qq_64378896的博客 114

物联网竞赛单片机应用开发-项目汇总

物联网竞赛单片机应用开发-项目汇总

a6662580的博客 9003

uboot移植准备资料之mini2440裸机实验——存储控制器、NANDFLASH

硬件平台和工具:mini2440, jlink 为了移植uboot做准备,这里仅仅的裸机实验,仅仅包括LED灯,SDRAM和NAND FLASH的操作。 1 方案设计 该实验主要是控制SDRAM和NANDFLASH,LED仅仅作为调试使用。因此,在mini2440的4k的stepping stone(加载自nandflash的前4k字节)中,执行关看门狗、初始化堆栈、初始化时钟等操作。然后跳

440

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Linux应用开发(七)——NAND Flash控制器

文章目录前言一、NANDFlash介绍1.1Flash介绍1.2NAND Flash的物理结构1.S3C2410 NAND Flash控制器介绍寄存器介绍二、NAND Flash控制器操作实例:读Flash理解思路总结 前言 了解NAND Flash芯片的接口 掌握通过NAND Flash控制器访问NANDFlash方法 一、NANDFlash介绍 NAND Flash在嵌入式系统中的地位与PC机上的硬盘类似,具有保存系统运行所必须的操作系统,应用程序,用户数据,运行过程中产生的各类数据。与内存掉电后

m0_56145255的博客 1160

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

20150311 NandFlash驱动分析

20150311 NandFlash驱动分析 2015-03-11 李海沿 一、结构体详解 MTD体系结构: 在linux中提供了MTD(Memory Technology Device,内存技术设备)系统来建立Flash针对linux的统一、抽象的接口 引入MTD后,linux系统中的Flash设备驱动及接口可分为4层: 设备节点 MTD设备层 MTD原始设备层 ...

weixin_30786657的博客 195

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

nandflash

啊,想死,第一次整体的看了一些芯片手册,发现还是挺简单的哈,不,只是看得代码为什么是这么写的了,简单我现在还不可以这么说,不过眼睛的看瞎了。tx板子真的垃圾!真的垃圾!真的垃圾。 我举一个NANDflash来说说吧! NANDflash流程:首先把NANDflash前4k数据放到内部内存SRAM里面去,然后在SRAM(地址为0)里面初始化外部内存SDRAM(地址为0x30000000),然后把...

qq_41609723的博客 520

第十二章 NandFlash驱动移植

12.1 NandFlash介绍 对Nandflash存储芯片操作,必须通过NandFlash控制器完成,不能通过对NandFlash进行总线操作 对NandFlash以块方式进行写,以字节进行读 12.1.1 命令介绍 命令发送到命令寄存器执行,命令执行是分周期,每条命令有不小于一个的执行周期,每个执行周期有相应代码表示该周期执行的动作。 主要:Read1,Read2,Read ID,Reset,Pa...

分享嵌入式,移动端,智能应用,数据库等专业板块,记录知识碎片!!! 1095

U-Boot NAND FLASH移植(附:源码和测试代码)

U-Boot NAND FLASH移植 ——西伯利亚的风       为了使u-boot支持NAND FLASH,实现u-boot读写NAND FLASH,我们需要根据开发板的具体情况修改u-boot,增加NAND FLASH驱动。 一、移植环境 1.u-boot版本1.1.6 2.开发板Jz2440(ARM9 S3C2440

cxsys的专栏 3171

【tiny4412】按键控制led灯亮灭

从上图可以找到相应的寄存器GPM4,于是从三星给到芯片手册中可以搜索GPM4可以找到相应的控制寄存器与数据寄存器: 与LED一样,通过先查找官方给的原理图,找到LED的引脚位置: 再利用引脚编码XEINT26查找对应的寄存器GPX3,同样在三星官方给的芯片手册中找到对应的数据寄存器与控制寄存器: b、控制逻辑如下: c、Makefile: 执行make,然后生成key_led.bin二进制文件 连接dnw到70003000处: 然后使用dnw传送二进制文件到板子上: 使用go 700030

weixin_60342993的博客 1677

NAND FLASH命名规则

常见的nand flash的命名规则

专注Android/嵌入式开发 9997

uboot移植(十)移植 NAND FLASH

通过查看帮助文档 doc/README.nand,要支持 NAND,需要配置 CONFIG_CMD_NAND我们修改 smdkv210.h,把 CONFIG_CMD_ONENAND 屏蔽掉,同时加上 CONFIG_CMD_NAND编译出错 没有定义 CONFIG_SYS_MAX_NAND_DEVICE,最大 NAND 设备数,我们的板子只有 1 个 NAND,将其定义为 1 再次编译,出错 未定义...

跬步千里,窥叶知秋 1589
上一篇: 第五章、Tiny4412 U-BOOT移植五 Nand Flash原理
下一篇: 第七章、Tiny4412 U-BOOT移植七 DDR内存配置
eshing
博客等级 码龄18年 146粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值