【黑金云课堂】FPGA技术教程Linux开发:串行通信接口与实时时钟模块

Linux 应用第 16-19 节 串行通信接口与实时时钟模块 ,选自ALINX 黑金云课堂 FPGA 免费直播课。该课程由 ALINX 资深工程师团队倾力打造,从 0 到 1 系统化教学,帮助每位工程师跨过 FPGA 开发门槛。

🔍 ALINX :关注 ALINX,进入视频号即可查看完整黑金云课堂 FPGA 视频教程。配合笔记学习效果更佳。

Uart 通信

  1. UART 基础:UART 是异步串行通信协议,常用 8N1 格式(8 位数据位、无校验、1 位停止位)。Zynq UltraScale+ 提供 2 个 UART 控制器,对应设备节点 /dev/ttyPS0和/dev/ttyPS1。ttyPS0 通常作为调试串口使用。

  2. 命令行控制 :使用stty命令配置串口参数(波特率、数据位等)。数据收发可直接通过echocat操作设备节点。minicom 提供交互式串口调试界面。

  3. C 语言编程 :通过termios结构体和tcsetattr()配置串口。主要步骤:打开设备→配置波特率和数据格式→使用 read/write 收发数据。Demo 程序提供发送、接收、回环测试三种模式。

  4. 实践要点:硬件连接时 TX 和 RX 需交叉连接,必须共地。最常见问题是波特率不匹配导致的乱码。回环测试需要短接 MOSI 和 MISO 引脚,用于验证硬件是否正常。

SPI 通信

  1. SPI 基础:SPI 是同步全双工串行通信协议,使用 4 根信号线(MOSI、MISO、SCLK、CS)。定义 4 种时钟模式(Mode 0-3),由 CPOL 和 CPHA 组合决定。Mode 0 最常用。

  2. QSPI Flash :Zynq 使用 QSPI Flash 作为启动存储器,存储 FSBL、U-Boot 和内核。Linux 中作为 MTD 设备访问,使用flash_erase擦除、dd命令读写。

  3. C 语言编程 :Linux 提供spidev用户空间驱动,通过/dev/spidevX.Y访问。使用ioctl(fd, SPI_IOC_MESSAGE, &xfer)进行数据传输。Demo 程序实现 Flash ID 读取、传输测试、回环测试功能。

  4. 实践要点:SPI 模式必须匹配从设备要求。回环测试将 MOSI 和MISO 短接验证硬件。Zynq 内置 SPI 控制器最高支持 50MHz 时钟频率。

I2C 通信

  1. I2C基础:I2C 是两线制串行总线(SDA、SCL),支持多主多从架构。使用7位地址识别设备。开漏输出需要外接上拉电阻(通常4.7KΩ)。

  2. i2c-tools 工具集i2cdetect扫描总线设备,i2cget/i2cset读写寄存器,i2cdump批量dump寄存器。是 I2C 调试的必备工具。

  3. C 语言编程 :通过/dev/i2c-X设备节点访问。使用ioctl(fd, I2C_SLAVE, addr)设置从机地址。读写 EEPROM 需要先写内存地址再读写数据,写入后需等待 5ms。

  4. 实践要点:缺少上拉电阻是最常见问题。EEPROM 写入后必须延时等待。地址冲突时可通过设备引脚修改地址。

RTC 实时时钟

  1. RTC 基础:RTC 是掉电保持运行的独立时钟电路,由纽扣电池供电。提供年/月/日/时/分/秒时间信息和闹钟功能。Zynq 内置 RTC 控制器,也可外接 I2C RTC 芯片。

  2. 命令行控制hwclock是主要操作工具(-r 读取、-w 写入系统时间、-s 同步到系统)。timedatectl提供更友好的状态查看。通过 sysfs 设置闹钟唤醒系统。

  3. C 语言编程 :使用rtc_time结构体表示时间(注意 tm_mon 范围0-11,tm_year 从1900起算)。常用 ioctl 命令:RTC_RD_TIME、RTC_SET_TIME、RTC_ALM_SET、RTC_AIE_ON。

  4. 实践要点:电池没电会导致时间丢失,需定期更换 CR2032 电池。有网络时推荐使用 NTP 校时,无网络时依赖 RTC 保持时间。

💡 完整视频讲解可前往 ALINX 视频号进行直播回看

更多细节欢迎关注我们黑金云课堂全年免费直播课
黑金云课堂五月直播日历 我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!

系列 内容定位
Verilog开发 硬件描述语言基础、逻辑设计、仿真调试
Vitis开发 Zynq软硬件协同、外设驱动、网络协议栈
Linux开发 嵌入式Linux系统移植、驱动编写、应用开发
相关推荐
sulikey2 小时前
ext2 GDT 块组描述符表 详细技术拆解
linux·操作系统·文件系统·ext2·gdt·ext·块组描述符
QuestLab2 小时前
Ollama在Linux上安装的详细记录
linux·运维·服务器
Strugglingler2 小时前
【Linux PL011驱动支持RS485】
linux·uart·rs485·pl011
IT瑞先生2 小时前
Linux系统基础
linux·运维·服务器
modelmd2 小时前
Linux chroot命令
linux
l1t2 小时前
在WSL的ubuntu 26.04容器中用deb安装包安装使用redrock-4.1-1
linux·运维·ubuntu·postgresql
renren-1003 小时前
centos7.9 升级openssl11 导致的系统命令瘫痪
linux·运维·服务器
SWAGGY..3 小时前
Linux系统编程:(六)编译器gcc/g++
linux·运维·服务器
蜡笔婧萱3 小时前
Linux——Web服务器网址建立(http和https的分离)
linux·运维·服务器