u-boot-2012.04.01移植(六)提供nand flash启动支持

u-boot201707调试LS1046CPU的板子时串口无打印 将SFUQ(1046CPU)的boot从C600分支(2017 11) 移入到uniboot分支(src2017 07)中,移植内容主要增加了SFUQ的私有驱动, 目前,已经可以编译出u-boot.bin,移植过程中主要解决了一些未定义、重定义的变量和函数。 上板子调试后,发现串口没有任何输出,通过点灯发现,init_sequence_f中的如下串口初始化相关函数已经走完了。 init_baud_... 阅读详情

重新编译烧写,串口输出错误信息:

Flash:*** failed ***

### ERROR ### Please RESET the board

 

这个错误下一节再解决,这一节先为u-boot提供nand flash启动的支持

前面分析uboot时提到链接时加上-pie选项会生成位置无关码,将变量、函数的地址保存起来,以便于在uboot重定位代码时使用,这样虽然可以不指定程序的链接地址,但会导致程序增大,超过4k,不易使用nand启动,并且重定位代码复杂

修改办法:

1、修改Makefile去掉链接命令中的-pie选项

通过下面命令找到-pie的位置在arch/arm/config.mk的75行

grep “\-pie” * -nR

注释掉arch/arm/config.mk的75行

#LDFLAGS_u-boot += -pie

 

2、添加nand支持

①、修改board/samsung/smdk2440/Makefile

//COBJS	:= smdk2410.o
COBJS	:= smdk2410.o init.o

 

②、在board/samsung/smdk2440中新增一个文件init.c,提供nand flash的操作函数、启动flash类型的判断、代码重定位函数等等

/* NAND FLASH */
#define NFCONF (*((volatile unsigned long *)0x4E000000))
#define NFCONT (*((volatile unsigned long *)0x4E000004))
#define NFCMMD (*((volatile unsigned char *)0x4E000008))
#define NFADDR (*((volatile unsigned char *)0x4E00000C))
#define NFDATA (*((volatile unsigned char *)0x4E000010))
#define NFSTAT (*((volatile unsigned char *)0x4E000020))

//void nand_read_ll(unsigned int addr, unsigned char *buf, unsigned int len);


static int isBootFromNorFlash(void)
{
	volatile int *p = (volatile int *)0;
	int val;

	val = *p;
	*p = 0x12345678;
	if (*p == 0x12345678)
	{
		*p = val;
		return 0;
	}

	return 1;
}

void copy_code_to_sdram(unsigned char *src, unsigned char *dest, unsigned int len)
{	
	int i = 0;
	
	if (isBootFromNorFlash())
	{
		while (i < len)
		{
			dest[i] = src[i];
			i++;
		}
	}
	else
	{
		nand_read((unsigned int)src, dest, len);
	}
}

void clear_bss(void)
{
	extern int __bss_start, __bss_end;
	int *p = &__bss_start;
	
	for (; p < &__bss_end; p++)
		*p = 0;
}

void nand_init_ll(void)
{
#define TACLS   0
#define TWRPH0  1
#define TWRPH1  0

	NFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4);
	NFCONT = (1<<4)|(1<<1)|(1<<0);	
}

static void nand_select(void)
{
	NFCONT &= ~(1<<1);	
}

static void nand_deselect(void)
{
	NFCONT |= (1<<1);	
}

static void nand_cmd(unsigned char cmd)
{
	volatile int i;
	
	NFCMMD = cmd;
	for (i = 0; i < 10; i++);
}

static void nand_addr(unsigned int addr)
{
	unsigned int col  = addr % 2048;
	unsigned int page = addr / 2048;
	volatile int i;

	NFADDR = col & 0xff;
	for (i = 0; i < 10; i++);
	NFADDR = (col >> 8) & 0xff;
	for (i = 0; i < 10; i++);
	
	NFADDR  = page & 0xff;
	for (i = 0; i < 10; i++);
	NFADDR  = (page >> 8) & 0xff;
	for (i = 0; i < 10; i++);
	NFADDR  = (page >> 16) & 0xff;
	for (i = 0; i < 10; i++);	
}

static void nand_wait_ready(void)
{
	while (!(NFSTAT & 1));
}

static unsigned char nand_data(void)
{
	return NFDATA;
}

void nand_read_ll(unsigned int addr, unsigned char *buf, unsigned int len)
{
	int col = addr % 2048;
	int i = 0;
		
	nand_select();

	while (i < len)
	{
		nand_cmd(0x00);

		nand_addr(addr);

		nand_cmd(0x30);

		nand_wait_ready();

		for (; (col < 2048) && (i < len); col++)
		{
			buf[i] = nand_data();
			i++;
			addr++;
		}
		
		col = 0;
	}

	nand_deselect();
}

 

③、修改arch/arm/lib/board.c

修改board_init_f的返回值类型为unsigned int,并且对应修改其声明的返回值,注意要去掉__attribute__ ((noreturn)),声明位于include/common.h

 

在board_init_f函数中

Ⅰ、将

	addr -= gd->mon_len;
	addr &= ~(4096 - 1);

替换为

	addr = _TEXT_BASE;

指定一个固定的链接地址(u-boot在SDRAM上的起始地址)

Ⅱ、在函数头部添加一行,引用外部变量,变量等下会定义在start.S中,用于存放栈指针

extern ulong base_sp;

Ⅲ、在函数末尾
将

 relocate_code(addr_sp, id, addr);

替换为

base_sp = addr_sp;
return id;

保存栈指针,返回参数地址

 

④、修改arch/arm/cpu/arm920t/start.S,使用新的重定位、清除bss段代码,栈也需要重新设置

Ⅰ、

源代码:

call_board_init_f:
	ldr	sp, =(CONFIG_SYS_INIT_SP_ADDR)
	bic	sp, sp, #7 /* 8-byte alignment for ABI compliance */
	ldr	r0,=0x00000000
	bl	board_init_f

 

修改后:

	ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
	bic sp, sp, #7 /* 8-byte alignment for ABI compliance */

	bl nand_init_ll

	mov r0, #0
	ldr r1, _TEXT_BASE
	ldr r2, _bss_start_ofs
	bl copy_code_to_sdram
	bl clear_bss

	ldr	pc, =call_board_init_f

call_board_init_f:
	ldr	r0,=0x00000000
	bl	board_init_f
/*board_init_f返回值存于r0,用于传入board_init_r*/
ldr	r1, _TEXT_BASE
ldr	sp, base_sp
	bl	board_init_r

.globl base_sp
base_sp:
.long 0

为了让代码跳转到重定位后的位置,需要用绝对跳转指令ldr pc, =call_board_init_f(如果使用相对跳转指令bl,无法跳到SDRAM),跳转到SDRAM后即可使用相对跳转指令bl调用子程序

 

Ⅱ、删除这段重定位相关代码

	.globl	relocate_code
relocate_code:
	mov	r4, r0	/* save addr_sp */
	mov	r5, r1	/* save addr of gd */
	mov	r6, r2	/* save addr of destination */

	/* Set up the stack						    */
stack_setup:
	mov	sp, r4

	adr	r0, _start
	cmp	r0, r6
	beq	clear_bss		/* skip relocation */
	mov	r1, r6			/* r1 <- scratch for copy_loop */
	ldr	r3, _bss_start_ofs
	add	r2, r0, r3		/* r2 <- source end address	    */

copy_loop:
	ldmia	r0!, {r9-r10}		/* copy from source address [r0]    */
	stmia	r1!, {r9-r10}		/* copy to   target address [r1]    */
	cmp	r0, r2			/* until source end address [r2]    */
	blo	copy_loop

#ifndef CONFIG_SPL_BUILD
	/*
	 * fix .rel.dyn relocations
	 */
	ldr	r0, _TEXT_BASE		/* r0 <- Text base */
	sub	r9, r6, r0		/* r9 <- relocation offset */
	ldr	r10, _dynsym_start_ofs	/* r10 <- sym table ofs */
	add	r10, r10, r0		/* r10 <- sym table in FLASH */
	ldr	r2, _rel_dyn_start_ofs	/* r2 <- rel dyn start ofs */
	add	r2, r2, r0		/* r2 <- rel dyn start in FLASH */
	ldr	r3, _rel_dyn_end_ofs	/* r3 <- rel dyn end ofs */
	add	r3, r3, r0		/* r3 <- rel dyn end in FLASH */
fixloop:
	ldr	r0, [r2]		/* r0 <- location to fix up, IN FLASH! */
	add	r0, r0, r9		/* r0 <- location to fix up in RAM */
	ldr	r1, [r2, #4]
	and	r7, r1, #0xff
	cmp	r7, #23			/* relative fixup? */
	beq	fixrel
	cmp	r7, #2			/* absolute fixup? */
	beq	fixabs
	/* ignore unknown type of fixup */
	b	fixnext
fixabs:
	/* absolute fix: set location to (offset) symbol value */
	mov	r1, r1, LSR #4		/* r1 <- symbol index in .dynsym */
	add	r1, r10, r1		/* r1 <- address of symbol in table */
	ldr	r1, [r1, #4]		/* r1 <- symbol value */
	add	r1, r1, r9		/* r1 <- relocated sym addr */
	b	fixnext
fixrel:
	/* relative fix: increase location by offset */
	ldr	r1, [r0]
	add	r1, r1, r9
fixnext:
	str	r1, [r0]
	add	r2, r2, #8		/* each rel.dyn entry is 8 bytes */
	cmp	r2, r3
	blo	fixloop
#endif

clear_bss:
#ifndef CONFIG_SPL_BUILD
	ldr	r0, _bss_start_ofs
	ldr	r1, _bss_end_ofs
	mov	r4, r6			/* reloc addr */
	add	r0, r0, r4
	add	r1, r1, r4
	mov	r2, #0x00000000		/* clear			    */

clbss_l:str	r2, [r0]		/* clear loop...		    */
	add	r0, r0, #4
	cmp	r0, r1
	bne	clbss_l

	bl coloured_LED_init
	bl red_led_on
#endif

 

3、修改链接地址

修改include/configs/smdk2440.h

//#define CONFIG_SYS_TEXT_BASE 0
#define CONFIG_SYS_TEXT_BASE 0x33F00000

 

4、修改链接脚本,将重定位前所用到的文件放在最前面

通过下面命令找到链接脚本位置arch/arm/cpu

find -name *.lds | grep arm

修改链接脚本

源代码

        .text :
        {
                __image_copy_start = .;
                CPUDIR/start.o (.text)
                *(.text)
        }

修改后

        .text :
        {
                __image_copy_start = .;
                CPUDIR/start.o (.text)
                board/samsung/smdk2440/libsmdk2440.o (.text)
                *(.text)
        }

 

重新编译烧写后即支持nand flash启动

 

 

 

 

 

 

 

 

 

 

OpenHarmony南向设备开发:在标准系统上实现对rk系列芯片NPU的支持(驱动移植) 本文以 rk3568 为例,将 RKNPU 驱动移植到 OpenHarmony 使用的 kernel 5.10 中...... 阅读详情

相关推荐

ERROR ### Please RESET the board 不能烧录固件

解决方案: 按住 Maskrom 按键上电或复位,系统将进入 MaskRom 固件烧写模式。即可重新烧录固件。 附录: Rockchip 平台硬件运行的几种模式如表所示,只有当设备处于 Maskrom,及 Loader模式下,才能够烧写固件,或对板上固件进行更新操作。 进入烧写模式方式以下几种方法: 未烧录过固件,上电,进入 Maskrom 模式。 烧录过固件,按住 recovery 按键上电或复位,系统将进入 Loader 固件烧写模式。 烧录过固件,按住 Maskrom 按键上电或复位,系统将进入 M

小灰灰的博客 1万+

u-boot-2012.04.01移植(七)提供nor flash支持

无论系统从NOR启动还是从NAND启动,都会打印相同的错误信息 Flash:*** failed *** ### ERROR ### Please RESET the board 正常的打印信息应该是 Flash: 2M 2M表示Flash大小 显然这里Flash识别出错 通过下面命令定位错误在arch/arm/lib/board.c:506: grep "Flash...

floatinglong的博客 520

Vivado与VCS+Verdi联合仿真环境搭建全攻略

本文详细介绍了如何搭建Vivado与VCS+Verdi联合仿真环境,旨在解决Vivado Simulator在大型FPGA验证中速度慢、调试弱的问题。通过指导工具版本配对、环境变量设置、关键参数配置及Xilinx仿真库编译,帮助工程师高效整合Vivado的设计管理、VCS的高速仿真与Verdi的深度调试能力,从而显著提升验证效率。

weixin_29219189的博客 577

uboot启动流程概述

一、uboot启动流程简介 与大多数BootLoader一样,uboot的启动过程分为BL1和BL2两个阶段。BL1阶段通常是开发板的配置等设备初始化代码,需要依赖依赖于SoC体系结构,通常用汇编语言来实现;BL2阶段主要是对外部设备如网卡、Flash等的初始化以及uboot命令集等的自身实现,通常用C语言来实现。 1、BL1阶段 uboot的BL1阶段代码通常放在start.s文件中,用汇编语言实现,其主要代码功能如下: (1) 指定uboot的入口。在链接脚本uboot.lds中指定uboot的入口为s

qq_37400022的博客 6105

对工时评估的思考:当AI颠覆了coding效率

在AI时代,“人日”作为软件工时度量衡已然失效。开发的价值核心正从“编码实现”转向“深度思考”与“精准沟通”——即如何将人类的模糊需求精确地传达给AI。当最有价值的“思想工作”变得最难量化时,传统的项目管理范式随之动摇。我们必须超越对过程的算计,开始探索衡量思想、沟通与业务价值的新标尺。

架构师刘7的博客 1017

MATLAB安装配置libsvm(附MinGW64配置)

首先声明版本,本人PC系统Windows10 64bit,matlab安装的2016b,libsvm安装的version3.2.21.首先需要下载libsvm包:从林教授的网站上下载: http://www.csie.ntu.edu.tw/~cjlin/libsvm/2.将libsvm3.2.2解压到matlab/toolbox目录下:解压后:D:\matlab2016b\toolbox\libs...

github_35807147的博客 4万+

TQ2440 u-boot-2012.04.01移植四支持NAND Flash

继 u-boot-2012.04.01移植二支持NOR Flash,继续修改代码支持NAND Flash。最后直接用NOR Flash里的u-boot烧写自己移植的u-boot到NAND,方便电脑没有并口或手上没有openjtag,照样能移植u-boot,当然有openjtag更方便。 开发环境: 系统:ubuntu 10.04.4 单板:tq2440 NAND FLASH:K9F1216

u010216127的专栏 1362

从HSPICE到Spectre:手把手教你搞定不同SPICE仿真器的网表转换(附避坑指南)

本文详细介绍了从HSPICE到Spectre的SPICE仿真器网表转换方法,包括核心语法差异、分步转换流程和常见问题排查。通过实战案例和避坑指南,帮助工程师高效解决不同SPICE仿真器间的兼容性问题,提升集成电路设计效率。

weixin_29745609的博客 368

【Linux 移植 】——4、移植 u-boot-2012.04.01 之 支持NAND启动

三、移植 u-boot-2012.04.01 之 支持NAND启动 需要进行修改和添加的文件: 1、添加的文件:init.c   包含NAND Flash 的相关配置  board/samsung/smdk2440目录, 修改Makefile 2、需要修改的文件: a、去掉-pie选项,修改arch/arm/config.mk b、start.S c、smdk2440.h d、co

Cawen的技术博客 970

Verilog流水线CPU设计(超详细)

快把这一篇给更了

Ace Cheney的博客 7万+

BUCK型DC/DC变换器的建模与仿真

BUCK型DC-DC变换器的建模与仿真摘要1 文献调研1.1 研究背景1.2 Buck电路的应用场合2 原理分析2.1 模型介绍2.2 模型分析2.3 频域和时域响应2.4 参数指标要求3 参数设计3.1 校正器选择3.2 校正器参数整定3.2.1 积分器3.2.2 一阶微分环节3.2.3 超前校正器3.3 改进4 结论与展望参考文献 摘要   目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。如何对一个系统进行建模分析、补偿校正变得越来越重要。   本文选择BUCK型DC/DC变换器作为载体,

屠龙归来仍是少年 2万+

TQ2440 u-boot-2012.04.01移植二支持NAND启动

继 u-boot-2012.04.01移植一串口正常输出,继续修改代码支持单板NAND启动。最后直接用NOR Flash里的u-boot烧写自己移植的u-boot到NAND,方便电脑没有并口或手上没有openjtag,照样能移植u-boot,当然有openjtag更方便。 开发环境: 系统:ubuntu 10.04.4 单板:tq2440 NAND FLASH:K9F1216U0A 256

u010216127的专栏 1448

【华为OD技术面试真题 - 技术面】- C++面试题(1)

2024华为OD面试手撕代码真题目录以及八股文真题目录

算法大师! 3398

TQ2440 u-boot-2012.04.01移植一串口正常输出

开发环境: 系统:ubuntu 10.04.4 单板:tq2440 NAND FLASH:K9F1216U0A 256MB NOR Flash:EN29LV160AB 2MB SDRAM:HY57V561620 x2 64MB NET:DM9000AEP 编译器:arm-linux-gcc-4.3.2 搭建开发环境详见ubuntu 10.04.4开发环境配置。 目标: 1.支持

u010216127的专栏 1767

TC3XX - MCAL知识点(九):PWM EB-tresos配置说明及代码浅析

脉冲宽度调制(PWM)驱动器负责提供与AUTOSAR指定的PWM信号生成相关的标准服务。PWM通道的底层定时器驱动是GTM (TOM或ATOM片)或CCU6 (T12或T13片)定时器通道。软硬件匹配关系如下:PWM直接引用的是GTM与CCU6模块,然后GTM与CCU6再关联到Port的,根据软硬件匹配关系,也能调用中断来使用,本例子没使用中断。CCU6是一个高分辨率的16位捕获和比较单元,具有特定的应用模式,主要用于交流驱动控制。特殊的工作模式支持控制无刷直流电机使用霍尔传感器或反电动势检测。

梦想技术家 2887

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ok6410 u-boot-2012.04.01移植五支持DM9000

继ok6410 u-boot-2012.04.01移植四后,开发板基本已支持MLC NAND,但还有一些细节地方修改,这节增加DM9000支持,通过网卡tftp程序到内存,接着通过NAND命令写到NAND,这一过程肯定会遇到很多问题,遇到后再一个个解决。 开发环境: 系统:ubuntu 10.04.4 单板:ok6410 NAND FLASH:K9GAG08U0D 2048MB NOR

u010216127的专栏 1769

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ok6410 u-boot-2012.04.01移植六完善MLC NAND支持

继ok6410 u-boot-2012.04.01移植四、五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的nand命令继续修改,最终实现通过网卡tftp程序到内存,接着通过NAND命令写到NAND。 开发环境: 系统:ubuntu 10.04.4 单板:ok6410 NAND FLASH:K9GAG

u010216127的专栏 2161

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 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")

uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)

在支持Nand Flash操作之前,首先要对Nand Flash的读写方法有一定的了解,参考文章: S3C2440-裸机篇-10 | 使用S3C2440操作Nand Flash 1. 去除nand flash屏蔽 在之前初步移植uboot时,发现开启nand flash之后编译不通过,所以屏蔽了nand flash的使用,在单板配置文件include/configs/smdk2440.h中开启...

Mculover666的博客(嵌入式) 2160

u-boot-2012.04.01 移植笔记

目标:把 u-boot-2012.04.01 移植到Jz2440开发板,并启动Linux内核 一、下载、建立source insight工程、编译、烧写、如果无运行分析原因 从官方网下载 u-boot-2012.04.01,并解压 tar xjf u-boot-2012.04.01.tar.bz2 进入u-boot-2012.04.01目录,并搜索查看该uboot是否支持s3c2440这...

Louis@L.M.的博客 1625

ok6410 u-boot-2012.04.01移植四增加MLC NAND支持

继ok6410 u-boot-2012.04.01移植三后,单板已具备下载程序,只需一根串口线就能下载程序。其实u-boot基本上已可以使用,在以后一步步完善u-boot。查看NAND型号,发现是MLC NAND,就又痛了,市场上一般开发板都是SCL NAND,并且MLC NAND操作起来复杂些,查看了很多资料,最终移植成功,放在这里与大家分享。 开发环境: 系统:ubuntu 10.04.4

u010216127的专栏 2416

TQ2440 u-boot-2012.04.01移植三支持NOR Flash

继 u-boot-2012.04.01移植二支持NAND启动,继续修改代码支持NAND Flash、NOR Flash。最后直接用NOR Flash里的u-boot烧写自己移植的u-boot到NAND,方便电脑没有并口或手上没有openjtag,照样能移植u-boot,当然有openjtag更方便。 开发环境: 系统:ubuntu 10.04.4 单板:tq2440 NAND FLASH:

u010216127的专栏 1962

ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)

继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND、DM9000等。但还需要完善比如环境变量、mtdpart分区、裁剪、制作补丁等。下面的工作就是完善移植的u-boot。 开发环境: 系统:ubuntu 10.04.4 单板:ok6410 NAND FLASH:K9GAG08U0D 2048MB NOR Flash:EN29LV160AB 2MB

u010216127的专栏 1907

移植u-boot-2012.04.01到s3c2440

看了韦东山老师的u-boot-2012.04.01移植,然后把大概移植内容整理了一下,如下。 开发环境: u-boot-2012.04.01 arm-linux-gcc-4.3.2.tar 1.环境配置: 老版本的gcc编译器编译时有问题,所以使用4.3.2 解压到根目录: book@book-desktop:/work/tools$sudo tar xjf arm-li

qq361294382的博客 738

移植u-boot-2012.04.01到JZ2440(三:修改源码之实现NOR启动与NAND启动)

目录 3. 修改源码之实现从NOR启动与NAND启动     3.1 前言    3.2 实现从NOR启动        3.2.1 修改设置时钟            3.2.1.1 CLKDIVN寄存器            3.2.1.2 总线模式            3.2.1.3 MPLL寄存器            3.2.1.4 修改源码        3.2.2 修改初始化存...

墨、白的博客 1227

移植u-boot-2012.04.01到JZ2440(四:修改源码之支持NOR Flash与NAND Flash)

目录 4. 修改源码之识别NOR Flash与NAND Flash     4.1 修改源码之识别NOR Flash        4.1.1 打开DEBUG调试        4.1.2 分析flash_init()函数        4.1.3 分析flash_detect_legacy()函数        4.1.4 分析jedec_flash_match()函数        4.1...

墨、白的博客 896

mini2440移植最新u-boot-2012.04.01详细解说

mini2440移植最新u-boot-2012.04.01详细解说 MINI2440开发板硬件环境 nor flash型号:SST39VF1601 nand flash型号:K9F1208 网卡型号:DM9000E 内核分区:4MB 使用4.3.2的...

dieling4341的博客 381
上一篇: u-boot-2012.04.01移植(五)修改串口初始化代码
下一篇: u-boot-2012.04.01移植(七)提供nor flash支持
floatinglong
博客等级 码龄9年 90粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值