龙芯处理器 nand 使用教程

龙芯处理器 nand 使用教程

nand分为:nand接口与spi接口,spi接口分spi norflash和spi nandflash

以LS2K为例,描述pmon和内核下的使用例程

一、PMON下使用教程

1、ls2k pmon源码获取路径

	http://ftp.loongnix.org/embedd/ls2k/pmon-loongson3.tar.gz

2、pmon源码与nand相关文件

	a、sys/dev/nand/ls2k-nand.c
	b、sys/dev/nand/spinand_lld.c
	c、Targets/LS2K/dev/spi_w.c
	d、sys/dev/nand/m25p80.c
	e、Targets/LS2K/conf/ls2k
	f、Targets/LS2K/ls2k/tgt_machdep.c
	g、Targets/LS2K/include/pmon_target.h

3、 pmon配置文件(Targets/LS2K/conf/ls2k)中选nand应类型

	a、如果使用的是nand接口nand选项为:
		Select  nand
		Option  CONFIG_LS2K_NAND
	b、如使用的是spi接口nand选项为:
		Select  nand
		Select  spinand_mt29f
	c、如使用的是spi接口的nor flash选项为:
		Select  m25p80

4、 pmon下nand分区

	1、修改源码调整分区
		Targets/LS2K/include/pmon_target.h
			#define TGT_DEFENV  {"mtdparts","nand-flash:30M@0(kernel),-(rootfs);spinand_flash:30M@0(kernel),-(rootfs)",0,&mtd_rescan},   \
                     {"bootdelay","3",0,0}   
 	2、pmon命令行下,命令修改
 		set mtdparts "nand-flash:30M@0(kernel),-(rootfs);spinand_flash:30M@0(kernel),-(rootfs)"

	备注:pmon与内核分区要保持一致!!!

5、 pmon下使用

	a、擦除
		mtd_erase /dev/mtd0r			备注:0代表分区,r后缀代表擦除不跳过坏快
	b、写数据
		devcp tftp://server-ip/vmlinux /dev/mtd0			备注:将内核镜像写入0分区内
		devcp tftp://server-ip/roofs-yaffs2.img /dev/mtd1y			备注:y后缀代表以yaffs2格式写入
	c、读取
		load /dev/mtd0			备注:从0分区读取数据到内存

二、内核下使用教程

1、ls2k内核源码获取路径

	http://ftp.loongnix.org/embedd/ls2k/linux-3.10.tar.gz

2、内核源码与nand相关文件

	a、drivers/mtd/nand/ls-nand.c
	b、drivers/mtd/nand/spinand_lld.c
	c、drivers/mtd/devices/m25p80.c

3、 内核配置(make menuconfig ARCH=mips)时选nand类型

	a、如果使用的是nand接口nand选项为:
		CONFIG_MTD_NAND_LS
	b、如使用的是spi接口nand选项为:
		CONFIG_MTD_SNAND_MT29F 		
	c、如使用的是spi接口的nor flash选项为:
		CONFIG_MTD_M25P80

4、 内核下nand分区

	a、1号处理器,ls1b为例,内核下nand分区在arch/mips/loongson/ls1b/platform.c里
	1、nand接口
		static struct mtd_partition ls1b_nand_partitions[]={
		     [0] = {
		         .name   ="kernel",		备注:分区名称
		         .offset =0,			备注:分区偏移
 		         .size   =0x40000000,	备注:分区大小
 	     	},
	    	 [1] = {
	     		.name   ="swap",
	    	   	.offset = 0x40000000,
	  	      	.size   = 0,
	   	  },                                                                                                                                       
	 };
	2、spi接口
		同上
	b、2、3号处理器,内核下nand分区是按照设备树分区,设备树默认用pmon下的(Targets/LS2K/conf/LS2K.dts)
	1、nand接口
		nand@0x1fe06040 {
             #address-cells = <1>;
             #size-cells = <1>;
             compatible = "loongson,ls-nand";
             reg = <0x1fe06040 0x0
                0x1fe06000 0x20>;
             interrupt-parent = <&icu>;
             interrupts = <52>;
             interrupt-names = "nand_irq";
 
             dmas = <&dma0 1>;
             dma-names = "nand_rw";
             dma-mask = <0xffffffff 0xffffffff>;

             number-of-parts = <0x2>;	备注:分区个数
 
             partition@0 {
                label = "kernel_partition";		备注:分区名称
                 reg = <0x0000000 0x01e00000>;	备注:分区大小(<偏移,大小>)
             };
 
             partition@0x01400000 {
                 label = "os_partition";
                 reg = <0x01e00000 0x0>;
             };
         }; 
	2、spi接口
		spi0: spi@1fff0220{
             compatible = "loongson,ls-spi";
             #address-cells = <1>;
             #size-cells = <0>;
             reg = <0x1fff0220 0x10>;
             spidev@3{
                 compatible = "rohm,dh2228fv";
                 spi-max-frequency = <100000000>;
                 reg = <3>;
             };
             spidev@0{
                 compatible = "m25p80";
                 spi-max-frequency = <40000000>;
                 reg = <0>;
             };
             spidev@1{
                 compatible = "mt29f";
                 spi-max-frequency = <20000000>;
                 reg = <1>;				备注:spi片选
             number-of-parts = <0x2>;	备注:分区个数
             partition@0 {
                 label = "kernel_partition";	备注:分区名称
                 reg = <0x0000000 0x01e00000>;	备注:分区大小(<偏移,大小>)
             };
            partition@0x01400000 {
            	label ="os_partition";                                                                                                    
                reg = <0x01e00000 0x0>;
             };
          };
       };
	
	备注:pmon与内核分区要保持一致!!!

5、 内核下使用

 	a、mount –t yaffs2 /dev/mtdblok1  /mnt		备注:将分区mtdblock1分区挂载到mnt目录上
 	b、cat /proc/mtd							备注:查看分区情况

三、ecc 纠错算法

	支持 soft ecc 和 bch 纠错算法
	a、不是用ecc在驱动中设置:
		this->ecc.mode = NAND_ECC_NONE
	b、使用 soft ecc 算法在驱动中设置:
		this->ecc.mode = NAND_ECC_SOFT;
	c、使用 bch 算法在驱动中设置:
		this->ecc.mode = NAND_ECC_SOFT_BCH;
		备注:pmon配置文件下需要打开 select nand_bch

四、nand调试常见问题

	a、发现不了nand
		检查nand片选是否正确
		查看nand_ids.c文件里是否包含所用的nand型号
	b、能发现nand,但不能使用
		pmon与内核分区大小不一致
		pmon与内核ecc模式不一致
  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大 大猫

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值