在配置很多外围器件的时候,几乎都要用到SPI口。一般流程都是用SPI向器件相应的寄存器写数据,然后读回来检测是否成功写入。ADI公司的AD/DA器件的SPI读写格式都差不多,如下图所示:

这也是4线SPI的常用格式。

数据的读和写用SDI的第一个bit来表示,1为从器件(SLAVE)的寄存器中读取数据,0表示向寄存器写入数据。SDI上跟着的一般为地址,地址后面,SDI上跟着的是需要写入的数据,SDO上相应位置为读出来的数据。

对于通用的SPI格式,用Vivado自带的AXI Quad SPI基本可以满足要求。应用的时候,对于大于8bit的数据,需要注意在传输数据的时候需要写入正确的次数。比如:

XSpi_Transfer(&SpiAdc, ADCCommand, ADCRegData, 2);

这里就是需要写入或者读取16bit的数据,则次数要写成2。

我的写入数据的代码为:

第一个参数选择slave,第二个为寄存器地址,第三个为数据。

int ADCWriteReg(u8 ADCSerialNum, u8 RegAddr, u16 Data) {int Status;if (ADCSerialNum == 0) {Status = XSpi_SetSlaveSelect(&SpiAdc, ADC0_MASK);if (Status != XST_SUCCESS) {return XST_FAILURE;}} else if (ADCSerialNum == 1) {Status = XSpi_SetSlaveSelect(&SpiAdc, ADC1_MASK);if (Status != XST_SUCCESS) {return XST_FAILURE;}} else if (ADCSerialNum == 2) {Status = XSpi_SetSlaveSelect(&SpiAdc, ADC2_MASK);if (Status != XST_SUCCESS) {return XST_FAILURE;}} else {xil_printf("There is no adc with this serial number.\r\n");}u8 ADCCommand[2];u16 ADCCommand16 = 0x0;ADCCommand16 = ((u16) RegAddr << 8) + Data;ADCCommand[1] = (u8) (ADCCommand16 >> 8);ADCCommand[0] = (u8) (ADCCommand16);XSpi_Transfer(&SpiAdc, ADCCommand, NULL, 2);xil_printf("Write ADC%d Address %02x the data : %08x\r\n", ADCSerialNum,RegAddr, Data);usleep(5000);return XST_SUCCESS;
}

读取数据的代码为:


int ADCReadReg(u8 ADCSerialNum, u8 RegAddr) {int Status;if (ADCSerialNum == 0) {Status = XSpi_SetSlaveSelect(&SpiAdc, ADC0_MASK);if (Status != XST_SUCCESS) {return XST_FAILURE;}} else if (ADCSerialNum == 1) {Status = XSpi_SetSlaveSelect(&SpiAdc, ADC1_MASK);if (Status != XST_SUCCESS) {return XST_FAILURE;}} else if (ADCSerialNum == 2) {Status = XSpi_SetSlaveSelect(&SpiAdc, ADC2_MASK);if (Status != XST_SUCCESS) {return XST_FAILURE;}} else {xil_printf("There is no adc with this serial number.\r\n");}u8 ADCCommand[2];u8 ADCRegData[2] = { 0x0, 0x0 };u16 ADCCommand16 = 0x0;ADCCommand16 = ((u16) RegAddr << 8);ADCCommand[1] = (u8) (ADCCommand16) + 0x80;ADCCommand[0] = 0x00;Status = XSpi_Transfer(&SpiAdc, ADCCommand, ADCRegData, 2);xil_printf("ADC%d %02x Address Reg data is: %02x", ADCSerialNum, RegAddr,ADCRegData[1]);xil_printf("%02x\r\n", ADCRegData[0]);usleep(5000);return XST_SUCCESS;
}

Zynq中SPI的读和写相关推荐

  1. 【轻松学】python中文件的读和写——open、read或readline、close

    文章目录 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 2.1 操作文件的套路 2.2 操作文件的函数/方法 2.3 read 方 ...

  2. python3中文件的读与写

    Python open() 函数用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出错误 完整语法:open(file, mode='r', buf ...

  3. SPI通信实验---verilog(FPGA作为从机,使用可读可写)

    文章原地址: http://www.cnblogs.com/fhyfhy/p/4429302.html SPI通信实验---verilog(FPGA作为从机,使用可读可写) 本实验讲究实用性,故设计思 ...

  4. NIO入门系列之第3章:从理论到实践:NIO 中的读和写

    3.1  概述 读和写是 I/O 的基本过程.从一个通道中读取很简单:只需创建一个缓冲区,然后让通道将数据读到这个缓冲区中.写入也相当简单:创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入 ...

  5. 用于读、写、删除、比较Session中的用户信息的类库。

    /// <summary>     /// 用于读.写.删除.比较Session中的用户信息.     /// </summary>     [Serializable]    ...

  6. python中对文件进行读和写

    Python读取文件 Open方法 常用形式 主要参数 注意 对文件进行写 对文件进行读 Open方法 打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,出 ...

  7. 教你如何在Python中读,写和解析CSV文

    摘要:在这篇文章中关于"在Python如何阅读CSV文件"中,我们将学习如何读,写和解析的CSV文件的Python. 您知道将表格数据存储到纯文本文件背后的机制是什么吗?答案是CS ...

  8. linux进程通信中有名管道的特点,linux进程通信之(四):有名管道的读与写

    前面我们说了无名管道,下面我们来说说有名管道,请看下面一段代码: fifo_write.c: #include#include#include#include#include#include#incl ...

  9. java opencsv 乱码_教你如何在Python中读,写和解析CSV文

    摘要:在这篇文章中关于"在Python如何阅读CSV文件"中,我们将学习如何读,写和解析的CSV文件的Python. 您知道将表格数据存储到纯文本文件背后的机制是什么吗?答案是CS ...

最新文章

  1. centos桌面进入服务器,解决如何在centos7桌面中打开终端_网站服务器运行维护
  2. Qt修炼手册4_信号与槽
  3. 初中参观机器人博物馆的作文_【六年级作文】参观机器人博物馆
  4. c++中多线程传递参数原理分析
  5. 如果Windows 8的销售没有预期那么好
  6. android语言切换快捷键,Android的语言设置两种方法
  7. JAVA编码 —— 字符串关键字内容替换
  8. html颜色代码生成器,在线取色配色工具,CSS3渐变色代码生成器-易玩稀有
  9. 彻底解决chrome等浏览器被劫持(篡改主页hao123等)问题
  10. 密码生成器(字母+数字+特殊字符)
  11. 【Android】手撸抖音小游戏潜艇大挑战
  12. 棋牌游戏开发制做花费,您知多少呢?
  13. PSP自制程序打包ISO方法及注意事项
  14. php eval 引号,PHP手册-eval()(可以将单引号中的变量解析)
  15. linux平台 wifi 7601 porting
  16. hids Elastic Security 系列1-Elastic Security介绍
  17. LaTeX调整enumerate的间距
  18. 前端身份证号码校验js代码
  19. 小学四则运算生成器(Java实现)
  20. 阿里旗下多个App已接入微信支付

热门文章

  1. 如何提取MaxDOS的IMG文件
  2. PHP打出来的数字和成语,带有数字和动物的成语大全_简单_一年级
  3. 天河超算大会2018-12-15
  4. PNA修饰多肽Bz-Val-Gly-Arg-PNA|Boc-Val-Leu-Gly-Arg-PNA
  5. 重庆大学本科毕业论文答辩和论文选题PPT模板
  6. 人穷时,越要懂得“富在迎来,贫在弃时”
  7. Go 的切片支持并发吗?
  8. python特性高移植性_Python特性图文盘点|微胜教育《九大编程语言全解析》系列...
  9. php程序员学什么语言好就业_为什么学汽修好就业
  10. armv8 cache PoU和PoC区别