新唐nuc972更换uboot调试串口
最近开新项目用到新唐的nuc972平台,由于硬件工程师为了方便布线,所以将原本用于调试口的uart0改成了485,需要将uart1更改为调试串口。最初从nuc972开发文档开始看,看uboot配置和修改的地方,最初查看uboot下include/configs/nuc970_evb.h文件,里面有不少宏,这些宏是用于配置相关的硬件接口,如果宏打开的话,相应的驱动文件可以被编译进uboot中,可以通过修改部分宏实现数据更改,但串口这里只有一个CONFIG_NUC970_CONSOLE,搜索这个宏之后,发现了这个宏控制着nuc970串口驱动程序,通过此宏可以将串口的驱动编译到uboot中去。
那想要更改uboot调试串口,肯定就这个串口驱动文件相关,打开drivers/serial/serial_nuc970.c文件,可以看到串口初始化的地方使用的就是uart0的接口信息
于是我将uart0相关的寄存器更改为uart1,其实也就是下面这一行
//#define UART0_BA 0xB8000000 /* UART0 Control (High-Speed UART) */
更改为:
#define UART0_BA 0xB8000100 /* UART1 Control (High-Speed UART) */
当然这个寄存器地址是从手册上面找到的,修改完毕之后,保存、编译、烧录,然后把串口查到uart1上面,复位后,发现uart1口啥东西都没用,很显然只改这个地方根本没用。
下面这个地方应该也要改成uart1的才对,但是怎么改,还得去查手册
uart0位于PE.0和PE.1口,而uart1位于PE.2和PE.3口,在手册中找到GPIOE口的复用功能配置
可以看到每个口不光可以做串口,还可以配置为普通的GPIO口,蓝色部分是uart0口的的发送和接收引脚,红色部分是uart1口的发送和接收,原来程序里面是将uart0口配置成txd和rxd,现在我们需要将uart1口PE.2和PE.3配置成串口。
0x1001 = 9
通过__raw_readl(REG_MFP_GPE_L) & 0xffff00ff)先读取到PE.2和PE.3的配置状态,然后&0xFFFF00FF将PE.2和PE.3两个口的配置清理,然后再|0x9900,就将这2个口配置成串口输入和输出,然后通过外面的__raw_writel()函数将新的数据写进寄存器。
__raw_writel((__raw_readl(REG_MFP_GPE_L) & 0xffff00ff) | 0x9900, REG_MFP_GPE_L); // UART1 multi-function
这样uart1口就被配置成了串口
保存后编译烧录,上电后发现uart1口还是没有输出,估计还是哪里不对,原来的uart0能工作估计其他地方还有配置,继续找
后面在board/nuvoton/nuc970.c文件中发现了对uart0进行了时钟配置操作
刚才上面我只是把uart1管脚复用功能配置成了串口模式,但是还没给uart1配置时钟,所以uart1没办法工作,只能再看芯片手册,根据上面的PCLKEN0去文档里面搜索,终于找到了下面这个图
每个uart都有单独的时钟,看来需要配置uart1的时钟,再往下翻,找到了这个图
只要将第17位设置为1就可以开启uart1的时钟了,而原来程序里面配置的uart0时用的时0x10000
而0x10000的第bit16刚好时1,所以要开启uart1的时钟,我们就需要将bit17位设置为1
也就是0x20000,如下图:
配置完毕后,立马编译,烧录,可是uart1还是没用数据出来,还能哪里有问题呢,这个地方我卡了好久,后面去github上面下了一个新的uboot,我这个版本是2013版的,下载地址在这里:https://github.com/OpenNuvoton/NUC970_U-Boot_v2016.11
下下来之后打开serial_nuc970.c看到串口初始化的地方跟我这个版本有区别
串口初始化有3行,其中第一行是开启时钟的,我的uboot是在板子里的nuc970.c里面已经初始化过了,多了中间一行,RX拉高的操作,而uart1的RX是PE.3,所以我又做了拉高RX的操作
再编译烧录后测试,还是不行,真是无语了
接下来我把新的uboot里面的3行全部拷贝下来,都更改成uart1的,把之前boards/nuvoton/nuc970evb/nuc970里面串口初始化里的回复成原来的。
即串口驱动文件里面修改成这样
编译后烧录,板子上电,然后就看到串口出现了熟悉的uboot数据,到此终于成功了。
后面我把串口RX拉高这一步去掉发现也是可以的
那主要其实就是前面2句在起作用。
新唐nuc972更换uboot调试串口相关推荐
- 新唐NUC972 uboot 编译环境搭建
前言 最近在搭建NUC972的虚拟机编译环境时遇到了一些小问题,通过网络各种搜索关于uboot编译的说明没有太详细的说明,最后各种百度搜索解决了此问题,把具体步实现步骤分享一下. 1. uboot 简 ...
- 新唐NUC972 Linux(一):USB烧写linux出厂镜像
文章目录 前言 一.硬件连接 二.安装驱动 三.烧写linux程序 四.运行程序 五.总结 前言 今天开始进军linux,学了那么久单片机,也摸得七七八八,至少点个灯还是会的.本人之所以买酷客的lin ...
- 新唐NUC972 ARM9 内置DDR2 最大128MB 11路UART 电表 集中器 充电桩
NUC972DF62Y 采用ARM926EJ-S核心,执行速度高达300 MHz,堆叠最大 128 MB DDR-II记忆体於同一封裝,提供216-pin LQFP封装,大幅减少PCB尺寸和降低电磁 ...
- n76e885_新唐N76E003,N76E616烧录,调试各种问题集【坑集】
新唐N76E003,N76E616烧录,调试各种问题集[坑集] 芒果 • 2018 年 10 月 24 日 这篇博文用来记录学习新唐单片机时遇到的问题以及解决的过程和方法.当然也有各种坑. 希望这篇文 ...
- 新唐NUC980使用记录:开发环境准备与编译配置基础说明
文章目录 目的 开发环境准备 调试烧录环境 开发编译环境 编译工具链 uboot 和 linux buildroot 应用程序示例 NUC980 NuWriter Linux command line ...
- 修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467)
Posted on 2011-10-31 10:53 jamiedu 阅读(889) 评论(0) 编辑 收藏 1.1 概述 TI针对DM6467提供的UBOOT和内核默认都是串口0作为调试串口输出的, ...
- 新唐NUC980使用记录:U-Boot Linux 编译与烧录(基于SPI NAND)
文章目录 目的 U-Boot编译 U-Boot环境变量 Linux编译 默认设置 使用SPI NAND剩余分区 使用SPI NAND YAFFS2作为rootfs 打包镜像 总结 目的 这篇文章中将测 ...
- Android OrangePi 4G IOT(二) - MTK更换调试串口
一.Debug LOG串口更改 orangepi 4G iot的默认的log调试串口是在板子后面的,使用起来不方便,之前UART0焊接不好导致焊盘弄坏了,没办法,准备修改成插针的40pin引脚的的UA ...
- 新唐NUC980使用记录:U-Boot Linux 编译与烧录(基于SD1位置SD卡)
文章目录 目的 SD卡分区 U-Boot编译 U-Boot环境变量 Linux编译 默认设置 使用SD卡剩余分区 使用SD卡分区存放rootfs 制作系统镜像 总结 目的 这篇文章中将测试在 NUC9 ...
最新文章
- Android中全局Application的onCreate多次调用问题
- 网络中工作组与域的解释
- oracle regr,oracle 分析函数
- c语言 在txt文件中搜索关键词_网络推广外包—网络推广外包如何在搜索引擎中体现关键词优化效果...
- 《JavaScript面向对象精要》——第1章 原始类型和引用类型 1.1 什么是类型
- laravel increment出现了翻倍递增_股票连续多少个涨停板就可以市值翻倍?
- jq 展示数据小细节
- 怎么样测试需要登录的接口?需要登录的接口怎么测试性能?
- 查询同一组的最大最小值及明细
- 【语音去噪】基于matlab GUI谱减法+维纳滤波语音去噪(带面板+信噪比)【含Matlab源码 1661期】
- 数字货币交易系统_区块链交易所开发,数字货币平台功能与安全
- 为什么要使用Iocomp控件?
- 快速修改Windows系统字体样式
- 地外水平/斜面的太阳理论辐照度计算及其python实现
- FFmpeg拼接文件常见问题
- Inheritance: 'A' is an inaccessible base of 'B'
- 点序AS2258量产详尽图文教程以及量产工具固件下载,保姆级教程
- Vue 编写(preventReClick)防暴点 +防抖(debounce)和节流(throttle)函数
- Power Query之二 可视化数据处理
- 【测绘程序设计】——大地坐标与空间直角坐标转换