开发板使用手册 让研发速度快上加快

更新包含了开发环境搭建、系统编译与烧写和pmon基础知识、启动流程分析、网络加载系统、烧写系统到nand以及新增pmon 移植教程、新增pmon下操作GPIO章节和pmon下Ejtag使用章节等。

pmon 支持俩种接口类型的 nand flash,一个是 nand 控制器接口,一个是 spi 接口。龙芯核心板上板载了一个 nand 控制器接口的 flash。

9.9.11.1 配置 pmon

首先我们需要在 pmon 里面添加对 nand 的支持,那么我们都要配置哪些内容呢?这个要从 pmon 的启动流程入手,pmon 在启动的时候是在 Targets/LS2K/ls2k/tgt_machdep.c 里调用 ls2k_nand_init()函数对 nand 进行初始化的, 如果我们要调用 ls2k_nand_init()函数,就需要定义宏定义 NNADN 和 CONFIG_LS2K_NAND, 其中 NNADN 的值在 Targets/LS2K/compile/ls2k/m25p80.h 中定义为 1,

所以我们只需要在 Targets/LS2K/conf/ls2k 文件中添加代码 option CONFIG_LS2K_NAND 即可,这里我们添 加到第 269 行,

在 pmon 默认的 bsp 中,默认添加了代码 select nand,所以这里我们不必要在添加代码 select nand,而select 指定的是后面的参数 nand 被选中,选中了 nand 参数以后,在 conf/files 文件中使用 file 指定的 c 文件就可以被编译到 pmon 里面。因为 file 指定的文件编译与否取决于后面的参数有没有被选中,needs-flag 表示为该文件生成头文件。

然我们回过头再来看条件编译的这部分代码,

如果我们定义了 NNAND 和 CONFIG_LS2K_NAND,就是执行*(volatile int *)0xbfe10420 |= (1<<9) 代码将GPIO 的管教复用设置为 NAND,,如果没用定义这俩个宏定义,就将复用关系设置为 GPIO,如下图所示:

如果定义了这俩个宏定义,接着就会调用 ls2k_nand_init 函数来初始化 nand,我们跳转到 ls2k_nand_init 函数定义的 sys/dev/nand/ls2k-nand.c 驱动文件,通过阅读代码我们可以找到对 mtd 结构初始化的驱动函数为 ls2k_nand_init_mtd,通过访问 mtd 就可以访问 nand 控制器,

在 ls2k_nand_init_mtd 函数中,最关键的是对 ECC 的选择,在 pmon 中默认的 ECC 有 NAND_ECC_SOFT 和 NAND_ECC_SOFT_BCH 俩种。BCH 校验比 ECC 校验有更强的纠错能力,龙芯 BSP 里面默认使用的是 ECC 校验,代码如下:

如果我们需要使用 BCH 校验,需要在在 Targets/LS2K/conf/ls2k 中定义 select nand_bch,,这个我们选择 BCH 校验,如下图所示:

9.9.11.2 配置分区

在 nand 初始化最后的步骤会建立分区信息,建立分区信息的逻辑是先会调用 nand_flash_add_parts 函

数对环境变量 mtdparts 进行判断,mtdparts 环境变量在 Targets/LS2K/include/pmon_target.h 中定义,

如 果 环 境 变 量 mtdparts 中 设 置 了 分 区 信 息 , 则 调 用 add_mtd_device 来 指 定 分 区 , sys/dev/nand/ls2k-nand.c 中代码如下:

环境变量 mtdparts 中的值我们要怎么设置呢?

这里环境变量的设置我们要和 pmon 里面设备树的保持一致,打开 Targets/LS2K/conf/LS2K.dts 设备树文件,找到 nand 节点,其中 nand 节点的子 partition 节点表示的是分区信息,如下图所示:

其中:

compatible = "loongson,ls-nand"; 表示匹配驱动所使用的属性。

reg = <0x1fe06040 0x0 0x1fe06000 0x20>; 表示控制寄存器的地址和长度,其中 0x1fe06040 是

NAND_DMA_ADDR_REG 的地址。 地址 0x1fe06000 是 NAND_CMD 的地址。长度均为 0x20。

interrupt-parent = <&icu>; 中断控制器是 icu

interrupts = <52>; 分配中断号为 52

interrupt-names = "nand_irq"; 中断名称

dmas = <&dma0 1>; 表示使用 dma0 控制器,通道数为 1

dma-names = "nand_rw"; dma 控制器名称

dma-mask = <0xffffffff 0xffffffff>; 表示设备 dma 能力,如果设备只有 32 位 dma 能力,则应该配置成

0x00xffffffff,如果设备有 64 位 dma 能力,则应该配置成 0xffffffff 0xffffffff

number-of-parts = <0x2>; 表示分区数量,这里设置成俩个分区

partition@0 {

label = "kernel_partition";

reg = <0x0000000 0x01e00000>;

};

分区 0,分区名称为 kernel_partition,其中分区起始地址为 0x0000000,分区长度为 0x01e00000。

partition@0x01400000 {

label = "os_partition";

reg = <0x01e00000 0x0>;

};

分区 1,分区名称为 os_partition,其中分区起始地址为 0x01e00000,分区长度为剩余所有空间。

这里我们需要修改 partition@0 和 partition@0x01400000 子节点。这里我们把内核的分区大小设置 成 30M,剩余的 482M 给文件系统。

接着我们需要添加片选信息。一般情况下根据硬件设计规范,Flash 的片选会接到 cs0 上,通过原理图我们可以确定,片选引脚连接到了 cs0 上,如下图所示:

但是设备树我们要怎么写呢?这个就需要我们去看驱动源码了,我们打开内核源码

drivers/mtd/nand/ls-nand.c 下的 nand 控制器的驱动,在第 637 行我们可以看到他是通过 nand-cs 来获取的片选信息,

所以我们在设备树中添加属性 nand-cs=<0x00>;,添加完成如下图所示:

这样,pmon 下的设备树我们就设置好了,然后我们回过头在来设置环境变量 mtdparts,要与设备树中我们设置的保持一致,修改完成如下图所示:

这样 pmon 对 nand 的设置就已经完成了。

国产软硬件龙芯系列迅为2K1000开发板配置 nand flash相关推荐

  1. 迅为2K-1000开发板编译PMON源码

    33.1到33.4准备工作做好以后,我们就可以编译pmon了,首先我们需要进到pmon的源码根目录下,如下图所示: 输入"cd zloader.ls2k"命令,进入到"z ...

  2. 迅为龙芯2K1000开发板PMON开发之配置nand flash之配置pmon

    pmon 支持俩种接口类型的 nand flash,一个是 nand 控制器接口,一个是 spi 接口.龙芯核心板上板载了一个 nand 控制器接口的 flash. 1 配置 pmon 首先我们需要在 ...

  3. 中国芯-国产系统+国产处理器-迅为2K1000开发板网络快速测试方法

    硬件连接方式 1 连接调试串口 首先我们使用配带的 232 串口数据线连接和 usb 转串口连接起来, 然后将 232 串口线公头一端连接到开发板的 CON2 座子上,如下图所示: 232 串口线连接 ...

  4. 学习 ARM 系列 -- FS2410 开发板上 Nand Flash 到内存的代码搬移

    一.目的    通过将 Nand Flash 前 4K 代码搬移到 SDRAM 中,了解如何初始化并使用 ARM 的内存,    为编写 ARM bootloader 和搬移内核到内存作准备. 二.代 ...

  5. fs2410开发板搭建网站服务器,学习 ARM 系列 -- FS2410 开发板上 Nand Flash 到内存的代码搬移...

    一.目的 前面做过一个实验,搬移 Nand Flash 里的前 4k 代码到内存指定位置,这其实是把 SRAM 从 0x40000000 开始的 4K 代码复制到 SDRAM 的指定位置,并没有涉及到 ...

  6. 迅为龙芯2K1000开发板编译Linux内核

    loongnix操是国产操作系统,带有非常友好的人机交互界面,可以运行在LS2K1000上,本章我们就一起来看下如何给开发板安装loongnix国产操作系统. 1.下载系统安装镜像 Loongnix系 ...

  7. 基于迅为2K1000开发板龙芯处理器安装 Linux系统到固态硬盘

    基于迅为2K1000开发板龙芯处理器安装 Linux系统到固态硬盘 硬件:迅为2K1000开发板 固态硬盘 LS2K1000 龙芯处理器支持 SATA 接口,所以在迅为开发板的底板板载了一个 M2 接 ...

  8. [转帖]你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下)

    你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下) https://www.ijiwei.com/html/news/newsdetail?source=pc&news_id=7177 ...

  9. 迅为3A5000开发板龙芯自主指令集从里到外100%全国产设计方案

    迅为3A5000开发板龙芯处理器自主指令集架构从里到外100%全国产设计方案 iTOP-3A5000 开发板采用全国产龙芯3A5000处理器,基于龙芯自主指令系统(LoongArch®)的LA464微 ...

最新文章

  1. 对于这个函数const int func(const int a) const声明中,三个const分别是什么意思?...
  2. Spark记录-Scala数据类型
  3. Java synchronized到底锁住的是什么?
  4. WEB下的excel批量导入功能
  5. STM32F103单片机PWM单脉冲输出模式
  6. 学一下HDFS,很不错(大数据技术原理及应用)
  7. 这类程序员成为百度、阿里宠儿,分分钟秒杀众应届毕业生
  8. javascript学习方法分享
  9. 谷歌浏览器html插件字体大小,字体换加插件,自定义Chrome网页字体,更改字体样式,调整字体大小...
  10. 2022年全球市场软件无线电平台总体规模、主要企业、主要地区、产品和应用细分研究报告
  11. Kattis Doors
  12. input和textarea中字体样式不同的解决方法
  13. 【CSDN AI周刊】第16期 | 黄仁勋怒怼TPU 龙之队惜败冷扑大师
  14. 解决Win10系统激活office2019时出现 0xc004f074 无法激活问题,亲测可用!!!
  15. 微信公众号图卡片息发送【模拟发送一个小程序信息】
  16. 贝尔曼-福特算法(Bellman-Ford)最短路径问题
  17. JS返回到上一页的三种方法
  18. 2、python学习笔记第二课:python开发环境
  19. 超声波测距模块(HC-SR04模块)特点及使用介绍
  20. 基于 Java 的短视频实战项目

热门文章

  1. bzoj4976宝石镶嵌 DP
  2. StringBuilder类型
  3. autojs自动获取短信验证码
  4. css中的定位以及绝对定位和相对定位的区别
  5. 甜品烘焙店用什么收银软件好
  6. 理科爱好者杂志理科爱好者杂志社理科爱好者编辑部2022年第6期目录
  7. java之DNF坑钱的增幅
  8. 3、Nio三大组件(Socket(线程池版的服务器设计))
  9. 记hadoop集群黑名单移除节点出现问题及解决
  10. 放弃FastDFS,拥抱MinIO的7大理由