module ZephRay;

今朝有鱼今朝摸

Category

  • 摄影
  • 玩机
  • 硬件坑
  • 翻译
  • 软件坑
  • 随记

Tags

  • LCD
  • 点屏
  • 单片机
  • 计算器
  • FPGA
  • 事
  • 摄影
  • STM32
  • 古董
  • Verilog
  • 测评
  • 笔记本
  • 改造
  • Linux
  • ARM
  • 移植
  • 树莓派
  • 教程
  • 小动物
  • nspire
  • 项目
  • GameBoy
  • LED
  • EPD
  • 景
  • ThinkPad
  • 3DS
  • HP
  • SDL
  • IBM
  • 晒机
  • Minecraft
  • 82ES
  • Kindle
  • 手办
  • Chiptune
  • 花
  • Assembly
  • 仙剑奇侠传
  • 演讲
  • NDSL
  • Nikon
  • 贴图

Recent replies

  • 城市猎人 发表于「IBM ThinkPad 560E (Type 2640) 简单展示」
  • Khiemmy 发表于「On the way to overclock the TI nspire CX II calculator」
  • critor 发表于「On the way to overclock the TI nspire CX II calculator」
  • ZephRay 发表于「On the way to overclock the TI nspire CX II calculator」
  • critor 发表于「On the way to overclock the TI nspire CX II calculator」
  • imbushuo 发表于「About Me」
  • 070 发表于「古董电脑选型」
  • Thermit 发表于「About Me」
  • 盛崖鱼 发表于「About Me」
  • Wenting Zhang 发表于「About Me」

My

RSS (中文优先)
RSS (English preferred)

坑 / Projects
关于我 / About
简历 / CV
破烂采购计划 / Craplist
古董电脑选型
SM83(GB CPU)指令编码
Linux PI 1M位跑分
Coremark跑分
音质参考

淘宝杂货铺
Bilibili空间
GitHub

Links

cnVintage古董电子论坛
cnCalc计算器论坛

Keshuai Xu
家骅的锦绣谷
>Lithia's Core
ntzyz's space
丘丘塔台
tonoko.moe
kasora's blog
447f.Misaka
paizhang.info
spinmry实验室
Hikari Calyx Tech.
春上冰月的博客
业余无线电台 BD4SUR
FindHao
Test2g
Shell Bin
LEAFER x LAB
标签:ARM

iMX6裸机调试笔记

2020 年 5 月 31 日分类:软件坑#ARM

简介

以下介绍的裸机开发均基于i.MX6 Platform SDK完成,最后的版本于2013年发布,在使用gcc9编译时会遇到一些小问题,这里不做具体介绍。所有的开发均在Ubuntu 20.04上完成。目标平台为i.MX6D/Q,大部分也适用于i.MX6S/DL,但是对于i.MX6UL/ULL会需要较大改动。

编译与下载

PlatformSDK的Makefile中已经包含了产生目标镜像的代码,直接编译即可产生可以烧写进SD卡或者通过uuu载入的镜像,SPI Flash有待研究。(uuu是代替了MfgTools的跨平台i.MX USB烧录工具,可支持i.MX6\7\8)

可以直接使用如sudo uuu application.bin的命令下载程序至RAM运行。如果需要写成脚本,可以参考如下的写法:

uuu_version 1.2.135

SDP: boot -f path_to_the_application.bin
SDP: done

如果需要使用JTAG下载,则需要单独编写初始化DDR内存的初始化脚本,暂未进行测试。

串口

在EVK上默认调试串口为UART4,如果实际使用的板子并非使用UART4,则需要修改成板子上对应使用的串口。定义位于board/common/hardware_modules.c中。

内存配置

DDR控制器配置位于启动镜像的DCD区域中。如果使用的内存与EVK不同,则通常需要修改DCD配置。这部分数据位于board/mx6dq/board/dcd.c中。可以考虑使用官方的Programming Aid工具和DDR Stress Test工具来产生合适的DDR控制器配置。

不同板子拥有不同的内存容量。通常会区分出一部分不可cache内存用作DMA使用。主内存映射代码位于sdk/core/src/mmu.c中,具体的DMA内存设定定义在apps/common/platform_init.c中。以下为我在1GB RAM板子上使用的内存分割方案,仅供参考:

mmu_map_l1_range(0x10000000, 0x10000000, 0x20000000, kOuterInner_WB_WA, share_attr, kRWAccess); // First 512MB
mmu_map_l1_range(0x30000000, 0x30000000, 0x20000000, kNoncacheable, kShareable, kRWAccess); // Last 512MB
MORE

LPC5500系列调试笔记

2020 年 4 月 11 日分类:硬件坑#单片机#ARM

注:本文内容主要在LPC5528上测试,同样适用于55S2x和55S6x,不确定将来推出的其它系列是否也会同样适用。

高速USB

高速USB需要外部晶振才能使用,外部晶振频率可以在12\16\19.2\20\24\30\32MHz之间选择。由于官方开发板使用的是16MHz的晶振,所有例程和库也是使用16MHz的。如果使用了其它频率的晶振,可以通过设置PLL_SIC寄存器修改。官方库中设置的代码位于fsl_clock.c中:

USBPHY->PLL_SIC     = (USBPHY->PLL_SIC & ~USBPHY_PLL_SIC_PLL_DIV_SEL(0x7)) | USBPHY_PLL_SIC_PLL_DIV_SEL(0x06);

其中0x06即为PLL分频器设定值。以下为可选的值:

PLL_DIV_SEL 晶振频率
0x0 32 MHz
0x1 30 MHz
0x2 24 MHz
0x3 ? MHz
0x4 20 MHz
0x5 19.2 MHz
0x6 16 MHz
0x7 12 MHz

Hardware Virtualization on RK3288

2019 年 9 月 21 日分类:软件坑#Linux#ARM
```make ARCH=aarch32 CROSS_COMPILE=arm-linux-gnueabihf- PLAT=rk3288 AARCH32_SP=sp_min``` ```cp ~/arm-trusted-firmware/build/rk3288/release/bl32/bl32.elf ./bl31.elf``` ```pip3 install pyelftools``` ```tools/mkimage -n rk3288 -T rksd -d tpl/u-boot-tpl.bin idbloader.img cat spl/u-boot-spl.bin >> idbloader.img``` ```make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- evb-rk3288-rk808_defconfig```

(笔记)使用linaro工具链构建busybox文件系统

2018 年 12 月 28 日分类:软件坑#ARM#Linux

只是做一下记录。由于uboot的兼容性问题,仍然选用gcc5。以下主要记录命令,基本可以直接复制使用。因目标平台为Cortex-A7,选择gnueabihf工具链。全文基本复读https://ntzyz.io/post/arm-v7-a-cross-compile-notes,zyz真是太强啦!

环境:Ubuntu 16.04 LTS + bash 执行用户需要具有root权限

BusyBox本体:

#建立保存下载文件的临时文件夹
mkdir temp && cd temp

#下载linaro工具链
wget http://releases.linaro.org/components/toolchain/binaries/5.5-2017.10/arm-linux-gnueabihf/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz

#解压至/opt
xz -d gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz
sudo tar xvf gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar -C /opt/

#准备目标文件系统,放置于/opt/basefiles中
sudo mkdir /opt/basefiles

#为当前session设置环境变量
export PATH=/opt/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

#下载并编译BusyBox
wget https://busybox.net/downloads/busybox-1.28.3.tar.bz2
tar xjvf busybox-1.28.3.tar.bz2
cd busybox-1.28.3
make defconfig
sudo ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make -j4 install CONFIG_PREFIX=/opt/basefiles
cd ..
MORE

GD32 + libopencm3 + OpenOCD 调试笔记

2018 年 5 月 27 日分类:硬件坑#Linux#ARM

这次做了一些使用GD32单片机的制作。虽然说GD32是和STM32寄存器级兼容的,确实可以直接使用ST提供的工具和代码,但是这么做明显是违反了ST的协议的(当然使用CMSIS是不违反协议的)。一个方案是使用GD提供的工具和源码库,但是这样如果在未来想要迁移回ST的话则又是给自己找麻烦,所以干脆使用开源的解决方案libopencm3,就没有问题了。顺便调试方案也选择OpenOCD吧,不然用SEGGER的二进制总觉得不太清真。

本文就简单记录下过程,方便以后参考。环境:Arch Linux。

安装必要的依赖

从官方源安装以下包:

# pacman -S arm-none-eabi-gcc arm-none-eabi-newlib

从AUR安装以下包:

  • openocd

创建一个项目

这里基本参考libopencm3提供的例子进行:

$ mkdir project
$ cd project
$ git init .
$ git submodule add https://github.com/libopencm3/libopencm3
$ make -C libopencm3 -j5
$ wget -O libopencm3.rules.mk https://raw.githubusercontent.com/libopencm3/libopencm3-examples/master/examples/rules.mk
$ wget -O libopencm3.target.mk https://raw.githubusercontent.com/libopencm3/libopencm3-examples/master/examples/stm32/l1/Makefile.include
$ cp libopencm3/lib/stm32/f1/stm32f103x8.ld .

修改libopencm3.target.mk的最后一行为:

include ../libopencm3.rules.mk

随后建立一个新的src文件夹,随便从libopencm3-examples里面复制个例子过来(.c和Makefile),如下修改Makefile文件:

OPENCM3_DIR = ../libopencm3
LDSCRIPT = ../stm32f103x8.ld

include ../libopencm3.target.mk

直接make hex或者make bin应该就能生成二进制了

使用OpenOCD下载

这里使用SWD方式下载,需要稍微编辑下配置文件

$ cd /usr/share/openocd/scripts/interface
$ cp jlink.cfg jlink-swd.cfg

在里面加入一行 transport select swd 即可。

随后启动OpenOCD并进行烧录:

openocd -f interface/jlink-swd.cfg -f target/stm32f1x.cfg
telnet localhost 4444
reset halt
flash write_image erase project.hex
reset
  • «
  • 1
  • 2
  • »
Copyright © 2009-2019 Wenting Zhang. All rights reserved.
Unless otherwise noted, content on this blog is licensed under CC BY-SA 4.0.