【黑金云课堂】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系统移植、驱动编写、应用开发
相关推荐
wait a minutes21 分钟前
Ubuntu 升级后 NVIDIA 驱动修复指南
linux·运维·ubuntu
qq_411262422 小时前
硬件是ESP32-P4连接LAN8720A,正常初始化之后,设备DHCP失败
stm32·单片机·fpga开发
bush42 小时前
嵌入式linux学习记录十二,mmap
java·linux·学习
似水এ᭄往昔2 小时前
【Linux系统编程】--进程概念
linux·运维·服务器
Dxy12393102162 小时前
Linux 如何关闭关不掉的进程
linux·运维·chrome
小徐敲java3 小时前
Linux读取串口实时数据
linux·运维·服务器
keyipatience3 小时前
25.Linux静态动态库全解析
linux·运维·服务器
爱睡觉1114 小时前
在 Android 模拟器 Shell 下运行 ncnn 推理的性能排查记录
linux·shell
落羽的落羽4 小时前
【项目】JsonRpc框架——开发实现1(细节功能、字段定义、抽象层、具象层)
linux·服务器·网络·c++·人工智能·算法·机器学习
shixuzhimeng4 小时前
FTP服务器项目
linux·网络·ftp