BusyBox命令与SDRAM接口配置详解
1. BusyBox命令概述
BusyBox包含众多实用命令,以下列举了部分常见命令及其功能:
| 命令 | 功能 |
| — | — |
| addgroup | 向系统添加一个组 |
| adduser | 向系统添加一个用户 |
| adjtimex | 读取并可设置系统时基参数 |
| ar | 从ar存档中提取或列出文件 |
| arping | 通过ARP请求/回复来ping主机 |
| ash | ash shell(命令解释器) |
| awk | 模式扫描和处理语言 |
| basename | 去除文件的目录路径和后缀 |
| bunzip2 | 解压缩文件(若未指定输入文件,则为标准输入) |
| bzcat | 解压缩到标准输出 |
| cal | 显示日历 |
| cat | 连接文件并将其打印到标准输出 |
| chgrp | 更改每个文件的组隶属关系 |
| chmod | 更改文件访问权限 |
| chown | 更改文件的所有者和/或组 |
| chroot | 将根目录设置为新根后运行命令 |
| chvt | 将前台虚拟终端更改为 /dev/ttyN |
| clear | 清屏 |
| cmp | 比较文件 |
| cp | 复制文件 |
| cpio | 从cpio存档中提取或列出文件 |
| crond | BusyBox版的cron守护进程 |
| crontab | 管理crontab控制文件 |
| cut | 将每个输入文件的选定字段打印到标准输出 |
| date | 显示或设置系统时间 |
| dc | 小型逆波兰式计算器 |
| dd | 复制文件,根据选项进行转换和格式化 |
| deallocvt | 释放未使用的虚拟终端 /dev/ttyN |
| delgroup | 从系统中删除一个组 |
| deluser | 从系统中删除一个用户 |
| devfsd | 用于管理devfs权限和旧设备名称符号链接的过时守护进程 |
| df | 打印文件系统已使用和可用的空间 |
| dirname | 去除文件名的非目录后缀 |
| dmesg | 打印或控制内核环形缓冲区 |
| dos2unix | 将文件从DOS格式转换为UNIX格式 |
| dpkg | 用于安装、删除和管理Debian软件包的实用程序 |
| dpkg-deb | 对Debian软件包(debs)执行操作 |
| du | 汇总每个文件和/或目录使用的磁盘空间 |
| dumpkmap | 将二进制键盘翻译表打印到标准输出 |
| dumpleases | 显示udhcpd授予的DHCP租约 |
| echo | 将指定的参数打印到标准输出 |
| env | 打印当前环境或在设置后运行程序 |
| expr | 将表达式的值打印到标准输出 |
| false | 返回退出码为FALSE(1) |
| fbset | 显示和修改帧缓冲设置 |
| fdflush | 强制软盘驱动器检测磁盘更改 |
| fdformat | 对软盘进行低级格式化 |
| fdisk | 更改分区表 |
| find | 在目录层次结构中搜索文件 |
| fold | 包装每个文件中的输入行 |
| free | 显示系统空闲和已使用的内存量 |
| freeramdisk | 释放指定ramdisk使用的所有内存 |
| fsckminix | 对MINIX文件系统进行一致性检查 |
| ftpget | 通过FTP检索远程文件 |
| ftpput | 通过FTP将本地文件存储到远程机器上 |
| getopt | 解析命令选项 |
| getty | 打开一个tty,提示输入登录名,然后调用 /bin/login |
| grep | 在每个文件或标准输入中搜索模式 |
| gunzip | 解压缩文件(或标准输入) |
| gzip | 以最大压缩率压缩文件 |
| halt | 停止系统 |
| hdparm | 获取/设置硬盘参数 |
| head | 将每个文件的前10行打印到标准输出 |
| hexdump | 以用户指定的二进制、八进制、十六进制、字符或十进制格式转储文件 |
| hostid | 打印机器的唯一32位标识符 |
| hostname | 获取或设置主机名 |
| httpd | 监听传入的http服务器请求 |
| hwclock | 查询和设置硬件时钟(RTC) |
| id | 打印用户或当前用户的信息 |
| ifconfig | 配置网络接口 |
| ifdown | 取消配置一个接口 |
| ifup | 配置一个接口 |
| inetd | 监听网络连接并启动程序 |
| init | BusyBox版的init |
| insmod | 将指定的内核模块加载到内核中 |
| install | 复制文件并设置属性 |
| ip | TCP/IP配置实用程序 |
| ipaddr | 操作接口地址 |
| ipcalc | 根据IP地址计算IP网络设置 |
| iplink | 操作接口设置 |
| iproute | 显示/设置路由表条目 |
| iptunnel | BusyBox的iptunnel实用程序 |
| kill | 向指定的进程发送信号(默认是SIGTERM) |
| killall | 向指定的进程发送信号(默认是SIGTERM) |
| klogd | 内核日志记录器 |
| lash | BusyBox的LAme SHell(命令解释器) |
| last | 显示最后登录到系统的用户列表 |
| length | 打印指定字符串的长度 |
| ln | 创建一个名为LINK_NAME或DIRECTORY的链接到指定的目标 |
| loadfont | 从标准输入加载控制台字体 |
| loadkmap | 从标准输入加载二进制键盘翻译表 |
| logger | 将消息写入系统日志 |
| login | 在系统上开始一个新会话 |
| logname | 打印当前用户的名称 |
| logread | 显示syslogd的消息 |
| losetup | 将LOOPDEVICE与文件关联 |
| ls | 列出目录内容 |
| lsmod | 列出当前加载的内核模块 |
| makedevs | 创建一系列块或字符特殊文件 |
| md5sum | 打印或检查MD5校验和 |
| mesg | mesg控制对终端的写入访问 |
| mkdir | 创建目录条目 |
| mkfifo | 创建一个命名管道(与mknod name p相同) |
| mkfsminix | 创建一个MINIX文件系统 |
| mknod | 创建一个特殊文件(块、字符或管道) |
| mkswap | 准备一个磁盘分区用作交换分区 |
| mktemp | 创建一个基于TEMPLATE命名的临时文件 |
| modprobe | 用于高级模块加载和卸载 |
| more | 每次一屏查看文件的过滤器 |
| mount | 挂载文件系统 |
| mt | 控制磁带驱动器操作 |
| mv | 重命名和/或移动文件 |
| nameif | 在接口处于关闭状态时重命名网络接口 |
| nc | Netcat打开一个到IP:端口的管道 |
| netstat | Netstat显示Linux网络信息 |
| nslookup | 向名称服务器查询给定主机的IP地址 |
| od | 以八进制和其他格式转储文件 |
| openvt | 在新的虚拟终端上启动一个命令 |
| passwd | 更改用户密码 |
| patch | BusyBox实现的patch |
| pidof | 获取命名进程的PID |
| ping | 向网络主机发送ICMP ECHO_REQUEST数据包 |
| ping6 | 向网络主机发送ICMP ECHO_REQUEST数据包 |
| pivot_root | 更改根文件系统 |
| poweroff | 停止系统并请求内核关闭电源 |
| printf | 根据用户格式格式化并打印参数 |
| ps | 报告进程状态 |
| pwd | 打印当前工作目录的完整文件名 |
| rdate | 从远程主机获取并可能设置系统日期和时间 |
| readlink | 显示符号链接的值 |
| realpath | 返回给定参数的绝对路径名 |
| reboot | 重启系统 |
| renice | 在允许的优先级范围内更改运行进程的优先级 |
| reset | 重置屏幕 |
| rm | 删除(取消链接)文件 |
| rmdir | 删除目录(如果它们为空) |
| rmmod | 从内核中卸载指定的内核模块 |
| route | 编辑内核的路由表 |
| rpm | 操作RPM软件包 |
| rpm2cpio | 输出rpm文件的cpio存档 |
| run - parts | 运行目录中的一系列脚本 |
| rx | 使用xmodem协议接收文件 |
| sed | Busybox的流编辑器实现 |
| seq | 将一系列数字打印到标准输出 |
| setkeycodes | 设置内核的扫描码到键码映射条目 |
| sha1sum | 打印或检查SHA1校验和 |
| sleep | 延迟指定的时间 |
| sort | 对指定文件中的文本行进行排序 |
| start - stop - daemon | 启动和停止服务的程序 |
| strings | 显示二进制文件中的可打印字符串 |
| stty | 显示和修改终端设置 |
| su | 更改用户ID或成为root |
| sulogin | 单用户登录 |
| swapoff | 禁用虚拟内存页面交换 |
| swapon | 启用虚拟内存页面交换 |
| sync | 将所有缓冲的文件系统块写入磁盘 |
| sysctl | 在运行时配置内核参数 |
| syslogd | Linux系统和内核日志记录实用程序 |
| tail | 将每个文件的最后10行打印到标准输出 |
| tar | 创建、提取或列出tar文件中的文件 |
| tee | 将标准输入复制到每个文件并同时复制到标准输出 |
| telnet | BusyBox的Telnet客户端实现 |
| telnetd | BusyBox的Telnet服务器实现 |
| test | 检查文件类型并比较值,返回退出码 |
| tftp | 使用TFTP协议传输文件 |
| time | 测量程序使用的时间 |
| top | 实时显示处理器活动 |
| touch | 更新给定文件的最后修改日期 |
| tr | 翻译、压缩和/或删除字符 |
| traceroute | 跟踪IP数据包的路由 |
| true | 返回退出码为trUE(0) |
| tty | 打印连接到标准输入的终端的文件名 |
| udhcpc | BusyBox的DHCP客户端实现 |
| udhcpd | BusyBox的DHCP服务器实现 |
| umount | 卸载文件系统 |
| uname | 打印某些系统信息 |
| uncompress | 解压缩Z文件 |
| uniq | 从输入中丢弃除一个之外的连续相同行 |
| unix2dos | 将文件从UNIX格式转换为DOS格式 |
| unzip | 从ZIP存档中提取文件 |
| uptime | 显示自上次启动以来的时间 |
| usleep | 暂停n微秒 |
| uudecode | 对经过uu编码的文件进行解码 |
| uuencode | 对文件进行uu编码 |
| vconfig | 允许创建和删除虚拟以太网设备 |
| vi | BusyBox的vi编辑器 |
| vlock | 锁定虚拟终端并需要密码解锁 |
| watch | 定期执行一个程序 |
| watchdog | 定期写入指定的看门狗设备 |
| wc | 打印每个文件的行数、单词数和字节数 |
| wget | 通过HTTP或FTP检索文件 |
| which | 在当前路径中查找命令 |
| who | 打印当前用户名和相关信息 |
| whoami | 打印与当前有效用户ID关联的用户名 |
| xargs | 对标准输入给出的每个项目执行命令 |
| yes | 重复输出一行包含所有指定字符串的内容,或输出y |
| zcat | 解压缩到标准输出 |
2. SDRAM接口考虑因素
2.1 SDRAM基础
要理解SDRAM的设置,需要了解SDRAM设备的基本操作原理。SDRAM设备被组织成一个单元矩阵,有若干地址位用于行寻址,若干用于列寻址。
在内存矩阵内部,电路相当复杂。一个简化的读取操作示例如下:通过在行地址线上放置行地址,然后在列地址线上放置列地址来引用一个给定的内存位置。经过一段时间后,由行和列输入寻址的位置所存储的数据会在数据总线上提供给处理器。
处理器在SDRAM地址总线上输出行地址,并断言其行地址选择(RAS)信号。在经过一个短的预编程延迟,让SDRAM电路捕获行地址后,处理器输出列地址并断言其列地址选择(CAS)信号。SDRAM控制器将实际的物理内存地址转换为行和列地址。许多SDRAM控制器可以配置行和列的宽度大小,PPC405GP就是这样的例子之一。
例如,突发读取一次读取四个内存位置,输出一个单一的RAS和CAS周期,SDRAM内部电路会自动为突发读取的后续三个位置递增列地址,从而消除了处理器发出四个单独CAS周期的需要。
2.1.1 SDRAM刷新
SDRAM由一个晶体管和一个电容器组成。晶体管提供电荷,电容器的作用是保留(存储)单个单元的值。由于某些原因,电容器只能在短时间内保持该值。动态内存的一个基本概念是,代表每个单元的电容器必须定期充电以保持其值,这被称为SDRAM刷新。
刷新周期是一种特殊的内存周期,它既不向内存读取也不写入数据,只是执行所需的刷新周期。SDRAM控制器的主要职责之一是保证及时发出刷新周期以满足芯片的要求。芯片制造商规定了最小刷新间隔,设计者的任务是保证这一点。通常,SDRAM控制器可以直接配置以选择刷新间隔,PowerPC 405GP有一个专门用于此目的的寄存器。
2.2 时钟
“同步”意味着SDRAM设备的数据读写周期与CPU的时钟信号一致。SDR SDRAM在每个SDRAM时钟周期进行读写,DDR SDRAM在每个时钟周期读写两次,一次在时钟的上升沿,一次在下降沿。
现代处理器有复杂的时钟子系统,许多处理器有多个用于系统不同部分的时钟速率。典型的处理器使用相对低频的晶体产生的时钟源作为其主时钟信号。处理器内部的锁相环产生CPU的主时钟(我们在比较处理器速度时所说的时钟速率)。
由于CPU通常比内存子系统运行得快得多,处理器会生成主CPU时钟的一个约数来供给SDRAM子系统。需要为特定的CPU和SDRAM组合配置这个时钟比。
处理器和内存子系统的时钟必须正确配置,SDRAM才能正常工作。处理器手册中有关于时钟设置和管理的章节,必须参考此章节来正确设置特定的板卡设计。
以AMCC 405GP为例,它采用单个晶体产生的时钟输入源,并为其子系统生成几个内部和外部时钟。它为CPU、PCI接口、板载外设总线(OPB)、处理器本地总线(PLB)、内存时钟(MemClk)以及定时器和UART块等外设的几个内部时钟。典型的配置如下表所示:
| 时钟 | 速率 | 注释 |
| — | — | — |
| 晶体参考 | 33MHz | 提供给处理器的基本参考 |
| CPU时钟 | 133MHz | 由处理器内部的PLL派生,由硬件引脚绑定和寄存器设置控制 |
| PLB时钟 | 66MHz | 从CPU时钟派生,通过硬件引脚绑定和寄存器设置配置。用于其高速模块之间的内部处理器本地总线数据交换 |
| OPB时钟 | 66MHz | 从PLB时钟派生,通过寄存器设置配置。用于不需要高速连接的外设的内部连接 |
| PCI时钟 | 33MHz | 从PLB时钟派生,通过寄存器设置配置 |
| MemClk | 100MHz | 直接驱动SDRAM芯片。从CPU时钟派生,通过寄存器设置配置 |
时钟设置的决策通常必须在硬件设计时做出。引脚绑定选项决定了处理器上电时的初始时钟配置。通过设置处理器内部专门用于时钟和子系统控制的寄存器中的分频器位,通常可以对派生时钟进行一定的控制。在基于405GP的示例中,最终的时钟配置由引脚绑定和固件配置决定。在加电后,引导加载程序的职责是尽早设置初始分频器和任何其他可通过处理器寄存器位配置的时钟选项。
2.3 SDRAM设置
在配置好时钟后,下一步是配置SDRAM控制器。不同处理器的控制器差异很大,但最终目标都是相同的:必须提供正确的时钟和定时值,以启用和优化SDRAM子系统的性能。
这里以U - Boot引导加载程序配置405GP处理器上的SDRAM控制器为例。U - Boot从4xx特定的cpu目录中的start.S汇编语言启动代码中提供了SDRAM初始化的钩子。以下是U - Boot的 …/cpu/ppc4xx/sdram.c文件中的sdram_init()函数:
01 void sdram_init(void)
02
{
03
ulong sdtr1;
04
ulong rtr;
05
int i;
06
07
/*
08
* Support for 100MHz and 133MHz SDRAM
09
*/
10
if (get_bus_freq(0) > 100000000) {
11
/*
12
* 133 MHz SDRAM
13
*/
14
sdtr1 = 0x01074015;
15
rtr = 0x07f00000;
16
} else {
17
/*
18
* default: 100 MHz SDRAM
19
*/
20
sdtr1 = 0x0086400d;
21
rtr = 0x05f00000;
22
}
23
24
for (i=0; i<N_MB0CF; i++) {
25
/*
26
* Disable memory controller.
27
*/
28
mtsdram0(mem_mcopt1, 0x00000000);
29
30
/*
31
* Set MB0CF for bank 0.
32
*/
33
mtsdram0(mem_mb0cf, mb0cf[i].reg);
34
mtsdram0(mem_sdtr1, sdtr1);
35
mtsdram0(mem_rtr, rtr);
36
37
udelay(200);
38
39
/*
40
* Set memory controller options reg, MCOPT1.
41
* Set DC_EN to '1' and BRD_PRF to '01' for 16 byte PLB Burst
42
* read/prefetch.
43
*/
44
mtsdram0(mem_mcopt1, 0x80800000);
45
46
udelay(10000);
47
48
if (get_ram_size(0, mb0cf[i].size) == mb0cf[i].size) {
49
/*
50
* OK, size detected -> all done
51
*/
52
return;
53
}
54
}
55}
该函数的执行步骤如下:
1. 读取405GP处理器上的引脚绑定,以确定SDRAM时钟的设计值。在这种情况下,考虑了两个可能的值:100MHz和133MHz。根据这个选择,选择常量,这些常量将在函数后面用于设置SDRAM控制器中的相应寄存器位。
2. 从第24行开始,使用一个循环来为最多五个预定义的内存大小设置参数。目前,U - Boot有逻辑支持单个内存库,大小为4MB、16MB、32MB、64MB或128MB。这些大小在 …/cpu/ppc4xx/sdram.c文件中的一个名为mb0cf的表中定义。该表根据405GP内存库配置寄存器所需的值,将一个常量与每个这些内存大小相关联。循环的操作如下:
graph TD;
A[开始] --> B[选择每个可能的内存库大小,从最大的开始];
B --> C[根据SDRAM时钟速度选择定时常量];
C --> D[禁用SDRAM内存控制器];
D --> E[用size[i]、timing constants[i]配置库0];
E --> F[重新启用SDRAM内存控制器];
F --> G[运行简单的内存测试以动态确定大小];
G --> H{测试大小是否等于配置大小};
H -- 是 --> I[结束];
H -- 否 --> B;
对于64MB的DRAM大小,内存库控制寄存器设置如下:
Memory Bank 0 Control Register = 0x000a4001
PowerPC 405GP用户手册描述了内存库0控制寄存器的字段如下表所示:
| 字段 | 值 | 注释 |
| — | — | — |
| 银行地址 (BA) | 0x00 | 该银行的起始内存地址 |
| 大小 (SZ) | 0x4 | 此内存库的大小,这里是64MB |
| 寻址模式 (AM) | 0x2 | 确定内存的组织方式,包括行和列位的数量。模式2表示12个行地址位,以及9或10个列地址位,最多四个内部SDRAM库 |
| 银行启用 (BE) | 0x1 | 此寄存器配置的银行的启用位。405GP中有四个这样的内存库配置寄存器 |
假设SDRAM时钟速度为100MHz,内存大小为64MB,sdram_init()函数选择的定时常量如下:
- SDRAM Timing Register = 0x0086400d
- Refresh Timing Register = 0x05f00000
PowerPC 405GP用户手册描述了SDRAM定时寄存器的字段如下表所示:
| 字段 | 值 | 注释 |
| — | — | — |
| CAS Latency (CASL) | 0x1 | SDRAM CAS延迟。该值直接来自SDRAM芯片规格。它是芯片从发出读取命令(CAS信号)到数据在数据总线上可用所需的时钟周期延迟。在这种情况下,0x1表示两个时钟周期 |
| Precharge Command to Next Activate (PTA) | 0x1 | SDRAM预充电命令停用给定的行。相反,激活命令启用给定的行以供后续访问,例如在突发周期期间。此定时参数强制预充电到后续激活周期之间的最短时间,由SDRAM芯片决定。正确的值必须从SDRAM芯片规格中获取。在这种情况下,0x1表示两个时钟周期 |
| Read/Write to Precharge Command Minimum (CTP) | 0x2 | 此定时参数强制给定的SDRAM读写命令到后续预充电命令之间的最短时间延迟。正确的值必须从SDRAM芯片规格中获取。在这种情况下,0x2表示三个时钟周期 |
| SDRAM Command Leadoff (LDF) | 0x1 | 此定时参数强制地址或命令周期断言到库选择周期之间的最短时间延迟。正确的值必须从SDRAM芯片规格中获取。在这种情况下,0x1表示两个时钟周期 |
U - Boot示例中配置的最后一个定时参数是刷新定时寄存器值。该寄存器需要一个字段来确定SDRAM控制器强制的刷新间隔。表示该间隔的字段被视为一个以SDRAM时钟频率运行的简单计数器。在假设SDRAM时钟频率为100MHz的示例中,编程到该寄存器的值是0x05f0_0000。从PowerPC 405GP用户手册中可知,这将每15.2微秒产生一个刷新请求。
一个典型的SDRAM芯片每行需要一个刷新周期。每行必须在制造商指定的最短时间内刷新。例如,某芯片制造商规定8192行必须每64毫秒刷新一次,这要求每7.8微秒生成一个刷新周期以满足该特定设备的规格。
3. 操作步骤总结与关键要点回顾
3.1 BusyBox命令操作要点
-
命令丰富性
:BusyBox涵盖了众多实用命令,从系统管理(如
adduser、deluser)到文件处理(如cp、mv),再到网络配置(如ifconfig、ping)等各个方面。在使用时,可根据具体需求从上述详细列表中查找合适的命令。 -
命令使用注意事项
:不同命令有不同的参数和使用场景。例如,
grep命令用于在文件中搜索特定模式,使用时需指定搜索的模式和文件;dd命令用于复制文件并可进行转换和格式化,需根据需求设置相应的选项。
3.2 SDRAM接口配置操作步骤
3.2.1 SDRAM基础理解要点
- 内存寻址原理 :SDRAM通过行地址和列地址来定位内存单元。处理器先输出行地址并断言RAS信号,延迟后输出列地址并断言CAS信号,SDRAM控制器将物理地址转换为行和列地址。
- SDRAM刷新机制 :由于SDRAM由晶体管和电容器组成,电容器需定期充电以保持数据,即SDRAM刷新。芯片制造商规定了最小刷新间隔,可通过SDRAM控制器的相关寄存器进行配置。
3.2.2 时钟配置步骤
- 了解处理器时钟子系统 :现代处理器有复杂的时钟子系统,通常使用晶体产生的时钟源,通过内部锁相环生成CPU主时钟。
- 确定时钟比率 :由于CPU速度通常快于内存子系统,需生成主CPU时钟的约数供给SDRAM子系统,要根据具体的CPU和SDRAM组合配置时钟比率。
-
参考处理器手册
:处理器手册中有关于时钟设置和管理的章节,需参考此章节进行板卡设计的时钟配置。以AMCC 405GP为例,其时钟配置如下表回顾:
| 时钟 | 速率 | 注释 |
| — | — | — |
| 晶体参考 | 33MHz | 提供给处理器的基本参考 |
| CPU时钟 | 133MHz | 由处理器内部的PLL派生,由硬件引脚绑定和寄存器设置控制 |
| PLB时钟 | 66MHz | 从CPU时钟派生,通过硬件引脚绑定和寄存器设置配置。用于其高速模块之间的内部处理器本地总线数据交换 |
| OPB时钟 | 66MHz | 从PLB时钟派生,通过寄存器设置配置。用于不需要高速连接的外设的内部连接 |
| PCI时钟 | 33MHz | 从PLB时钟派生,通过寄存器设置配置 |
| MemClk | 100MHz | 直接驱动SDRAM芯片。从CPU时钟派生,通过寄存器设置配置 |
3.2.3 SDRAM控制器配置步骤
- 读取引脚绑定确定时钟值 :以U - Boot配置405GP处理器为例,先读取引脚绑定确定SDRAM时钟的设计值(如100MHz或133MHz),并根据此选择相应的常量用于设置SDRAM控制器的寄存器位。
- 循环配置内存库参数 :使用循环为预定义的内存大小(如4MB、16MB、32MB、64MB、128MB)设置参数,具体步骤如下:
graph TD;
A[开始] --> B[选择每个可能的内存库大小,从最大的开始];
B --> C[根据SDRAM时钟速度选择定时常量];
C --> D[禁用SDRAM内存控制器];
D --> E[用size[i]、timing constants[i]配置库0];
E --> F[重新启用SDRAM内存控制器];
F --> G[运行简单的内存测试以动态确定大小];
G --> H{测试大小是否等于配置大小};
H -- 是 --> I[结束];
H -- 否 --> B;
-
设置内存库控制寄存器
:以64MB的DRAM大小为例,内存库0控制寄存器设置为0x000a4001,其各字段含义如下表:
| 字段 | 值 | 注释 |
| — | — | — |
| 银行地址 (BA) | 0x00 | 该银行的起始内存地址 |
| 大小 (SZ) | 0x4 | 此内存库的大小,这里是64MB |
| 寻址模式 (AM) | 0x2 | 确定内存的组织方式,包括行和列位的数量。模式2表示12个行地址位,以及9或10个列地址位,最多四个内部SDRAM库 |
| 银行启用 (BE) | 0x1 | 此寄存器配置的银行的启用位。405GP中有四个这样的内存库配置寄存器 | -
设置定时寄存器
:假设SDRAM时钟速度为100MHz,内存大小为64MB,设置SDRAM定时寄存器为0x0086400d,刷新定时寄存器为0x05f00000,各字段含义如下表:
| 字段 | 值 | 注释 |
| — | — | — |
| CAS Latency (CASL) | 0x1 | SDRAM CAS延迟。该值直接来自SDRAM芯片规格。它是芯片从发出读取命令(CAS信号)到数据在数据总线上可用所需的时钟周期延迟。在这种情况下,0x1表示两个时钟周期 |
| Precharge Command to Next Activate (PTA) | 0x1 | SDRAM预充电命令停用给定的行。相反,激活命令启用给定的行以供后续访问,例如在突发周期期间。此定时参数强制预充电到后续激活周期之间的最短时间,由SDRAM芯片决定。正确的值必须从SDRAM芯片规格中获取。在这种情况下,0x1表示两个时钟周期 |
| Read/Write to Precharge Command Minimum (CTP) | 0x2 | 此定时参数强制给定的SDRAM读写命令到后续预充电命令之间的最短时间延迟。正确的值必须从SDRAM芯片规格中获取。在这种情况下,0x2表示三个时钟周期 |
| SDRAM Command Leadoff (LDF) | 0x1 | 此定时参数强制地址或命令周期断言到库选择周期之间的最短时间延迟。正确的值必须从SDRAM芯片规格中获取。在这种情况下,0x1表示两个时钟周期 |
3.3 总结
通过对BusyBox命令和SDRAM接口配置的详细介绍,我们了解了BusyBox命令的丰富功能和使用场景,以及SDRAM接口配置的关键步骤和原理。在实际应用中,可根据具体需求灵活运用BusyBox命令进行系统管理和操作,同时按照上述步骤和要点进行SDRAM接口的配置,以确保系统的正常运行和性能优化。
希望以上内容能帮助你更好地理解和应用BusyBox命令和SDRAM接口配置相关知识。如果你在实际操作过程中遇到问题,可根据上述内容进行排查和解决。
超级会员免费看
2598

被折叠的 条评论
为什么被折叠?



