作者的话

BF533是ADI Blackfin系列DSP处理器里的最经典型号,这个DSP我用了20年,单就这一颗DSP来讲,我相信国内应该没有比我更资深的了,下面就来说一说这颗DSP。

这颗IC是Blackfin里的经典款,由于Blackfin系列DSP均是同一个内核,在我看来,会用BF533,就约等于会用ADI Blackfin全系列DSP。实际上也确实是这样,我本人是从2002年开始用BF533,后面继续做了BF527,BF524,BF537,BF547,BF548,BF561,BF518,BF512,BF504,BF506,BF592,BF706,BF707,BF609,BF608;几乎每一颗ADSP,我都有基于项目做过软硬件的开发,而这一切的基础就是BF533。

这个系列,我计划从内核架构开始,到外设、驱动、典型算法、软件应用、uclinux、ucos等方面,来说一说这颗DSP。

硬件准备

ADSP-EDU-BF533开发板:BF533全功能开发板

产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.11.5c1d42b3yniNnQ&id=39598018589

在这里插入图片描述

AD-HP530ICE仿真器:ADI DSP专用仿真器

产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.11.52dfbfa3xB7JE7&id=38007242820

在这里插入图片描述

AD-CMOS:CMOS摄像头子卡
AD-MEMS:ADI MEMS三轴加速度传感器子卡
AD-ADC:ADC采集子卡
AD-LCD:2.4寸LCD子卡

硬件链接

在这里插入图片描述

Blackfin可以跑操作系统,因为他作为一个DSP,内部有一个Intel做的很弱的mmu,我见过最多的是uclinux,有兄弟说uclinux是不是差点意思,能不能直接上标准linux,我的答复是不行,我们都论证过,ADI也论证过,他的mmu太弱了,跑不了标准linux,但是uclinux一点问题都没有,我也做过几个相关项目,本文简单说一说。

在这里插入图片描述

板载 uClinux 系统的启动

板卡启动 uClinux 系统,需要在板卡上加载 uboot 和 uImage 文件。 这两个文件在 uC 资料的“烧写文件“中。烧写 uboot,需要使用仿真器与板卡连接,通过 Visual DSP++软件上自带的 Flash 编程功能,将 uboot. Bin 文件以 2 进制方式写入 Flash,文件的烧写方法也可参考之前的章节。

uboot 和内核的烧写:

VDSP 软件通过仿真器与板卡连接,选择 VDSP 软件下的 Flash 编程选项。

在这里插入图片描述
加载光盘中提供的 NorFlash 驱动 DXE 文件,文件名为“ADSP-EDU-BF53x_FlashDriver.dxe “,位于驱动 uC 资料的“烧写文件“中。

在这里插入图片描述

按下图配置烧写 uboot 代码。选择 Flash 全部擦除,以 2 进制方式将光盘中 u-boot.bin 文件写入 0 地址。点“Program”开始烧写。

在这里插入图片描述

Uboot 烧写完成:

在这里插入图片描述
Uboot 烧写完成后,按下图配置进行内核文件的烧写。

在烧写内核时,选择不擦除 Flash,以 2 进制方式将内核文件uImage.norflash 写入地址 0x40000。配置好后点“Program”开始烧写。

在这里插入图片描述

内核烧写成功后,将 Visual DSP++软件与仿真器断开,板卡断电,将板卡串口与计算机串口连接,打开 windows 系统中自带的超级终端软件,配置波特率为 57600。

超级中端的设置:

板卡与计算机串口通讯的波特率为 57600。 在 windows 配置超级终端
选择“开始”->“所有程序”->“附件”->“通讯”->“超级终端”

输入名称,选择“确定”

在这里插入图片描述

选择连接时使用的 COM 口,如使用 USB 转串口适配器连接,串口段口号可在设备管理器上查看。选定连接的串口后,点“确定”。

在这里插入图片描述

将每秒位数设置为 57600,其他参照下图设置。点击“应用”、“确定”

在这里插入图片描述

完成串口配置后,将 SD 卡连接电脑,在卡中建立一个名叫“uclinux”文件夹,将光盘中 UC 下提供的“应用程序”文件夹中文件拷贝的 SD 卡的“uclinux”文件夹下。将 SD 卡插入板卡 SD 卡插槽。将板卡启动模式设置拨码开关
S2 拨至 S2-1 :ON ,S2-2 :ON ,为板卡上电。

上电后在超级中端软件中可观察到启动信息,在超级终端上显示 uboot 倒计时,按回车键,输入以下指令,设置 uboot环境变量。

将启动输出设置为 UART 和液晶屏输出:
setenv bootargs ‘root=/dev/mtdblock0 rw earlyprintk=serial,uart0,57600 console=tty0 console=ttyBF0,57600’

将启动设置为 NorFlash 启动
setenv bootcmd run flashboot

将启动地址设置为 NorFlash 0x20040000 地址启动
setenv flashboot bootm 0x20040000

保存设置
save

重新启动 uboot
reset

在这里插入图片描述

重新启动 uboot 后,等待 uboot 倒计时自动走到 0 后,uClinux 内核会自动启动,待内核启动完成后,可进行应用程序的测试。uClinux 内核启动后,可在根目录路径下,通过以下命令进行手动挂载:

mount -t msdos /dev/spi_mmc /mnt/mmc 2>/dev/null
mount -t msdos /dev/spi_mmc1 /mnt/mmc 2>/dev/null
rm /dev/console
ln -s /dev/ttyBF0 /dev/console
挂载后,进入/mnt/mmc 路径,即可用 ls 命令查看 SD 卡内文件:
cd /mnt/mmc
ls

应用程序测试

进入 SD 卡下的 uClinux 应用程序目录:
cd /mnt/mmc/uclinux

在这里插入图片描述

目录中的应用程序用于测试当前板卡各个模块,执行完一个应用程序后,按 Ctrl+C 键退出当前应用程序,回到命令行进行下一个应用程序的测试。

声卡测试:mp3play test.mp3
运行后在板卡上的绿色耳机接口中插上耳机即可收听音乐。

按键测试:
./keytest
运行后按板卡按键,可打印按键按下和抬起的信息。

触摸屏测试:
./test_ts
运行后触摸液晶屏,会打印出当前液晶屏坐标。

LED 与液晶屏背光控制测试:
./gpio a b
a 代表 LED 灯编号,数字 0~7 分别代表不同的 LED 灯,8 代表液晶屏背光灯,b 代表点亮或者熄灭 LED 灯,1 代表点亮,0 代表熄灭。

如点亮 LED0 和液晶屏背光
./gpio 0 1
./gpio 8 1

液晶屏测试:
./test_fb2
运行后液晶屏显示测试图案

摄像头拍照测试:
使用这个功能板卡必须连接与板卡配到的摄像头子卡板,其摄像头型号为 OV9650 模组。摄像头子卡板不可以带电插拔,需在板卡断电的时候,插入摄像头子卡板,正确插入时,摄像头模组镜头朝向板卡接口方向。
./cap test.bmp
sync
待 sync 同步执行完后,在 SD 卡中生成一个名为 test.bmp 的图片,将卡插入电脑中,可以查看图片。

在这里插入图片描述

网卡测试:
先将板卡 IP 配置到与其连接的计算机的 IP 段内,假设与板卡连接的计算机的 IP 为 192.168.1.100,板卡的网卡IP 为 192.168.1.5,通过超级终端,输入以下命令设置板卡 IP:
ifconfig eht0 192.168.1.5
完成设置后,将网线连接板卡和计算机,然后通过超级终端,用以下命令测试网络通路:
ping 192.168.1.100
若网路通路,则返回 ping 相关信息。

在这里插入图片描述

工具链安装

需要安装的工具链有:
blackfin-toolchain-08r1-8.i386.tar.gz
blackfin-toolchain-elf-gcc-4.1-08r1-8.i386.tar.gz
blackfin-toolchain-uclibc-default-08r1-8.i386.tar.gz

启动 linux 系统,将工具链拷入 linux 分区,通过以下命令解压:
tar xvf blackfin-toolchain-08r1-8.i386.tar.gz
tar xvf blackfin-toolchain-elf-gcc-4.1-08r1-8.i386.tar.gz
tar xvf blackfin-toolchain-uclibc-default-08r1-8.i386.tar.gz

在这里插入图片描述

解压完工具链后,工具链会被安装在/opt/uClinux 文件夹下。

在这里插入图片描述

编译环境的映射:
打开 /ect 文件夹下的 profile 文件,将以下代码复制到文件里:
export PATH= P A T H : / o p t / u C l i n u x / b f i n − l i n u x − u c l i b c / b f i n − l i n u x − u c l i b c / b i n e x p o r t P A T H = PATH:/opt/uClinux/bfin-linux-uclibc/bfin-linux-uclibc/bin export PATH= PATH:/opt/uClinux/bfinlinuxuclibc/bfinlinuxuclibc/binexportPATH=PATH:/opt/uClinux/bfin-linux-uclibc/bin
export PATH= P A T H : / o p t / u C l i n u x / b f i n − u c l i n u x / b i n e x p o r t P A T H = PATH:/opt/uClinux/bfin-uclinux/bin export PATH= PATH:/opt/uClinux/bfinuclinux/binexportPATH=PATH:/opt/uClinux/bfin-uclinux/bfin-uclinux/bin
export PATH= P A T H : / o p t / u C l i n u x / b f i n − e l f / b f i n − e l f / b i n e x p o r t P A T H = PATH:/opt/uClinux/bfin-elf/bfin-elf/bin export PATH= PATH:/opt/uClinux/bfinelf/bfinelf/binexportPATH=PATH:/opt/uClinux/bfin-elf/bin
保存文件,并重新启动 linux。

Uboot 的编译

uboot 源码压缩包:
将 uboot 压缩包考进 linux 磁盘分区,进入 uboot 压缩包所在的文件夹,用以下命令进行解压:
tar xzvf u-boot.tar.gz
解压完成后,进入解压后的文件夹,先清除之前编译的信息:
make distclean
清除完成后,使用下面的命令对 uboot 进行编译:
make bf533-ezkit_config
make

在这里插入图片描述

如在编译过程中报错,可重启系统再测试。
编译完成后,会生成用于烧写的 uboot.ldr 和 uboot.bin 文件,可通过 VDSP 软件进行烧写。
通常烧写 2 进制文件 uboot.bin。

uclinux 的编译

uClinux 源码压缩包:
ADSP-EDU-BF533uC_V2.1.tar.gz
将 uClinux 源码压缩包考到 Linux 磁盘分区,通过以下命令解压:
tar zxvf ADSP-EDU-BF533uC_V2.1.tar.gz
uClinux 的编译:
进入解压后的文件夹中,输入以下命令进行编译:
auto.sh

在这里插入图片描述

编译完成后,会在 image 文件夹中生成可以写入 norflash 中的 2 进制烧写文件 uImage.norflash,其可以直接用 VDSP写入 norflash。
如添加了 uClinux 的底层驱动,需配置 Menuconfig 选项。
Menuconfig 的配置:
输入命令:
make menuconfig
会弹出配置界面
配置 “Vendor/Product Selection —>”

在这里插入图片描述

为目标板选择厂商和板卡型号

在这里插入图片描述

选择厂商为 AnalogDevices

在这里插入图片描述

选择板卡型号为:BF533-EZKIT

在这里插入图片描述

配置“Kernel/Library/Defaults Selection —>”

在这里插入图片描述

选择“Customize Kernel Settings(NEW)”

在这里插入图片描述

保存并退出。

在这里插入图片描述

稍等片刻会进入 uC 设备的配置界面,在该界面中,可根据需要进行配置。

在这里插入图片描述

应用程序的编译

将光盘中 uC 下“应用程序源码”中的 tat 包拷到 Linux 磁盘分区中解压:
tar xvf ADSP-EDU-BF53xAppCode.tar 解压后能看到每个应用程序的源码
进入每个源码的文件夹,输入 make 命令,即可对应用程序进行编译:
make
编译后会生成与.c 文件同名的可执行应用程序。
光盘中提供的应用程序与编译后生成的应用程序文件名略不相同,因为 uC 下最大支持长度为 8 的文件名,为方便在 uC 下使用,将生成的文件文件名改短,可以根据需要更改应用程序的文件名。
编译过的代码,如需要重新编译,可以通过以下命令清除编译痕迹:
make clean
清除后,可以用 make 命令进行重新编译。

TFTP 工具的使用

通过 TFTP 传输启动内核

在开发过程中,修改内核镜像文件后,如采用 norflash 烧写的方式进行测试,速度很慢。可以采用 TFTP 方式将镜像文件代码传入板卡的 SDRAM 中,进行启动测试。

在光盘 uC 文件夹中,提供一个 TFTP 工具,解压后可看到如下文件。

在这里插入图片描述

将要运行的 uImage.norflash 文件复制到该目录下,为方便使用,将其名称改为 uImage,然后运行 tftpd32.exe 文件:

在这里插入图片描述

在 TFTP 传输文件时,该软件不能关闭。

Server interface 选项选择与板卡连接的网卡 IP 地址,将板卡通过网线与计算机网口连接。运行超级终端,为板卡上电(板卡必须烧写 uboot,并且将启动模式设置为 00),在超级终端上可以看到 uboot 启动界面,按空格键进入 uboot
命令状态。
设置 uboot 下的服务器 IP 地址 192.168.1.100:
setenv serverip 192.168.1.100
设置 uboot 下的板卡 IP 地址 192.168.1.5:
serenv ipaddr 192.168.1.5
保存设置:
save

在这里插入图片描述

输入 TFTP 传输命令,将 TFTP 服务器下的 uImage 文件写入板卡内存地址 0x1000000 处:

tftp 0x1000000 uImge

在这里插入图片描述

内核传输完成后,通过 bootm 命令系统从 0x1000000 地址启动:
bootm 0x1000000

在这里插入图片描述

自动 TFTP 加载

在开发时,也可以将启动模式设置为 TFTP 启动,这样不用每次输入命令,其设置方法是:
在 uboot 启动后,进入 uboot 命令模式,输入以下指令:
将环境变量设置为网络启动:
setenv ramargs ‘set bootargs root=/dev/mtdblock0 rwearlyprintk=serial,uart0,57600 console=tty0 console=ttyBF0,57600’
设置启动模式为 TFTP 模式:
set bootcmd tftp 0x1000000 uImage; bootm 0x1000000

上述命令中的“\”必须添加。

保存环境变量:
Save

在之前已经设置了服务器 IP 和板卡 IP,所以此次不需要设置,如没有设置过,需重新设置 IP 地址。由于加载是通过 TFTP 服务实现的,所以必须运行 TFTP 服务软件,并在在 TFTP 软件下有需要加载的 uImage 文件。

再次运行 uboot 后,待读秒过后,板卡将自动从 TFTP 服务器上加载名为 uImage 的镜像文件,所以要加载的镜像文件名必须为 uImage。

TFTP 文件传输

如果想从 PC 上将一些文件写入 SD 卡中,每次拔插 SD 卡不是很方便,可以通过 TFTP 服务实现 PC 与板卡的文件传输。
启动板卡进入 uC 系统中,如将 SD 卡中 uclinux 文件夹下的 test.bmp 文件上传至 PC:
设置板卡 IP:(已设置过的不需要设置)
ifconfig eth0 192.168.1.5
进入要传输文件的路径:
cd /mnt/mmc/uclinux/
传输文件到服务器:
tftp –p 192.168.1.100 test.bmp –l test.bmp

在这里插入图片描述

在传输结束后,可以在服务器端看到上传的文件:

在这里插入图片描述

通过 TFTP,也可以将服务器上的文件下载到 SD 卡中,方法如下:
传输文件到 SD 卡:
tftp –g 192.168.1.100 test.bmp –l test.bmp

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐