SPI总线知识总结

news2024/9/24 19:19:46

1 SPI的时钟极性CPOL和时钟相位CPHA的设置
1.1 SPI数据传输位数
SPI传输数据过程中总是先发送或接收高字节数据,每个时钟周期接收器或发送器左移一位数据。对于小于16位的数据,在发送前必须左对齐,如果接收的数据小于16位,则采用软件将无效的数据位屏蔽。

1.2 Linux Example
@ drivers/hwmon/max1111.c
static int max1111_probe(struct spi_device *spi)
{
    enum chips chip = spi_get_device_id(spi)->driver_data;
    struct max1111_data *data;
    int err;

    spi->bits_per_word = 8;
    spi->mode = SPI_MODE_0;  //HERE
    err = spi_setup(spi);
    if (err < 0)
        return err;

    [...]
}

1.3 MCU
@ mems_init.c
spi_config.polarity = HAL_SPI_MASTER_CLOCK_POLARITY0;
spi_config.phase = HAL_SPI_MASTER_CLOCK_PHASE0;

Cywee CMH1000 IC is designed by Realtek, software is designed by Cywee. CMH1000 sensorhub integrates 224KB DRAM and 336KB IRAM, SRAM voltage is 1V.
CMH1000 sensorhub侧DataRAM开始地址保留1024字节,给SPI传输用,分成TX和RX,各512 bytes;sensorhub侧封包最大是269 bytes(包括header和payload)。

2 SD卡SPI模式
2.1 SD卡pin映射到SPI模式
针脚       SD卡模式       SPI模式
1             CD/DAT3         CS
2             CMD                MOSI
3             VSS                 VSS
4             VCC                 VCC
5             CLK                  CLK
6             VSS                  VSS
7             DAT0                MISO
8             DAT1                NC
9             DAT2                NC

2.2 SD命令中的CMD和ACMD的区别
ACMD:Application specific ComManD, which is an application specific command rather than a standard command。
一般的CMD只有6个bit,后来发现需要的CMD类型多了,所以就扩展出了CMD55+ACMDxx的扩展模式。ACMD命令发送前需要先发送CMD55,比如ACMD41,先发送CMD55,再发送ACMD41。

2.3 SD/MMC 初始化流程
1)配置时钟,慢速一般为400K,设置工作模式
2)发送CMD0,进入空闲态,该指令没有反馈
3)发送CMD8,如果有反应,CRC值与发送的值相同,说明该卡兼容SD2.0协议
4)发送CMD55+ACMD41,判断SD卡的上电是否正确,短反馈成功说明该卡为SD卡(短反馈第31位置1为HC卡),否则发送CMD0,有反应说明是MMC卡
5)发送CMD2,验证SD卡是否接入,长反馈CID(Card IDentification Register)
6)发送CMD3,读取SD卡的RCA(地址,Relative Card Address),短反馈
7)发送CMD9,读取CSD(Card Specific Data Register)寄存器获取卡的相关信息
8)发送CMD7,使能SD卡
9)配置高速时钟,准备数据传输,一般20M~25M
10)发送CMD55+ACMD51读取SCR(SD Card Configuration Register)寄存器,SD卡可以通过该值获得位宽,如果是MMC卡则需要使用主线测试来确定卡的位宽
11)SD卡发送CMD55+ACMD6配置为4bit数据传输模式(根据SCR读出来的值确定),MMC卡发送CMD6来设置位宽
12)发送CMD7,使能SD卡,使其进入传输状态,接着发送CMD16设置块大小(根据前面读取的CSD信息确定)
13)把命令参数设置为0,再次发送CMD7,取消选中所有卡

Figure 2-1 SD卡的初始化和识别流程

2.4 Q and A
Q:SD卡的工作频率是根据什么来决定的?
A:目前所知不是通过读取寄存器(可读写寄存器CSD、SCR等)获取的,而是根据SD卡的类型,类型对应着工作频率。
host端配置支持的频率,然后SD卡本身会有支持的频率,两边取都支持的最高频率,所以需要得到SD卡的类型,类型就对应着频率。
in mmc.c
mmc_select_card_type() - 根据卡的类型(仅需要知道卡的类型后)选择工作频率,选择的工作频率不能大于最大工作频率(最大工作频率由CSD寄存器TRAN_SPEED[103:96]字段指定)。

3 SPI接口以太网芯片
WIZnet - 80 MHz SPI slave接口
ENC28J60 - Microchip Ethernet Controller,10 MHz SPI slave
CH395 - SPI slave 30 MHz

QCOM平台使用gpll0去做分频,SPI的速度可以达到100 MHz

BCM89230交换芯片- SPI slave最高速度62.5 MHz,Data Format(Big Endian序):1-byte command, 4-byte address, 1 ~ 8 bytes data

4 APL A39X0 Gen9
4.1 spi-pxa2xx
4.2 ACPI - iasl_win
cat /sys/firmware/acpi/tables/DSDT > DSDT.aml
sudo apt-get install iasl
iasl -d DSDT.aml
cat DSDT.dsl

WINDOWS BINARY TOOLS
https://www.acpica.org/downloads/binary-tools

5 Abbreviations
ACMD: Application specific ComManD
ARC: Argonant RISC Core
AT91SAM9260: SAM means Smart ARM-based
ATMEL SAMBA: ATMEL Smart ARM-based Boot Assistant
DTR: Data Transfer Rate
DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
ISP1161: Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
MISO: mi s əu
MOSI: m əu si
QUP:高通平台的SPI总线和I2C共用core和引脚,称为QUP(QCOM Universal Peripheral);而UART和QUP又共用引脚,并且称为BLSP
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci)
TLV: TI Low Value,高性价比
TPS: TI Performance Solution

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1491244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wordpress模板官网

移民wordpress主题 移民代办wordpress主题&#xff0c;适合做海外移民咨询的代理公司搭建wordpress企业官方网站使用。 https://www.jianzhanpress.com/?p5130 夏令营wordpress主题 绿色夏令营wordpress主题&#xff0c;适合做夏令营或户外拓展的公司搭建wordpress官方网站…

Go 与 Rust:导航编程语言景观

在当今构建软件时&#xff0c;开发者在编程语言上有着丰富的选择。两种脱颖而出的语言是 Go 和 Rust - 都很强大但却截然不同。本文将从各种因素比较这两种语言&#xff0c;以帮助您确定哪种更适合您的需求。 我们将权衡它们在并发、安全性、速度、互操作性等方面的方法。我们将…

【Redis】Redis入门

文章目录 一、Redis简介二、Redis的特性三、Redis的使用场景四、Redis可以做什么五、Redis不可以做什么六、CentOS7安装Redis5七、Redis通用命令 一、Redis简介 Redis 是⼀种基于 键值对&#xff08;key-value&#xff09; 的NoSQL数据库&#xff0c;与很多键值对数据库不同的…

Win UI3开发笔记(四)设置主题续2

本机深色主题下设置的背景颜色可以作用于整个对话框&#xff0c;本机浅色模式下设置的背景颜色只作用与下边的部分。 如果本机选深色&#xff0c;程序选浅色&#xff0c;设置为light只对上部分管用&#xff0c;下部分不管用。如图&#xff0c;左边那个hello按钮要看不见了。。…

Mac版2024 CleanMyMac X 4.14.6 核心功能详解

CleanMyMac 是 macOS 上久负盛名的系统清理工具&#xff0c;2018 年&#xff0c;里程碑式版本 CleanMyMac X 正式发布。不仅仅是命名上的变化&#xff0c;焕然一新的 UI、流畅的动画也让它显得更加精致。新增的系统优化、软件更新等功能&#xff0c;使得在日常使用 macOS 时有了…

力扣hot100:15.三数之和(双指针/哈希表)

分析&#xff1a; 三数和问题&#xff0c;这里和两数之和不一样&#xff0c;返回的是值&#xff0c;因此可以对其进行排序&#xff0c;使用双指针。 一、一层循环双指针 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {sort…

react-beautiful-dnd组件报Unable to find draggable with id

一、问题现象 项目中使用react-beautiful-dnd组件实现可拖拽,但拖了1次后可能会出现拖拽异常(元素拖不动),打开控制台会发现有报错 二、解决方案 给Draggable组件和其下方的div添加了key就正常了,以下是我自己简单写的一个demo,可供参考 import {useState } from reac…

代码随想录算法训练营第32天—贪心算法06 | ● *738.单调递增的数字 ● *968.监控二叉树 ● 总结

*738.单调递增的数字 https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 考点 贪心算法 我的思路 暴力解法 视频讲解关键点总结 几个关键点一&#xff0c;如果当前数位小于上一数位&#xff0c;如87&#xff0c;则应直…

redis06 redis事务

思维草图 redis事务认识 redis事务是一个单独的隔离操作&#xff0c;事务中的所有命令都会序列化、按顺序地执行&#xff0c;事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断。 redis事务的主要作用就是串联多个命令防止别的命令插队。 Multi、Exec、…

AWS 认证报名考试流程

AWS认证的考试包括&#xff0c;可以申请线上或者线下考试。 考试类型 线上&#xff1a; 优点&#xff1a;方便快捷无需通勤&#xff0c;随时约随时考&#xff0c;基本上每天都可以 缺点&#xff1a;对环境要求较高&#xff0c;屋子里只能有自己&#xff0c;而且不能有其他声音…

【Linux】Linux C编程

gcc编译器 gcc [options] [filenames] 其中&#xff0c;options是编译器所需要的选项参数&#xff0c;filenames是文件名。 gcc编译过程 C语言编译过程一般可以分为预处理、编译、汇编、链接四个步骤。 1.预处理阶段 预处理阶段主要处理宏定义和include&#xff0c;并进行语…

腾轩科技传媒讲解企业怎样做整合营销推广才有效果

当今信息爆炸的时代&#xff0c;企业如何才能从浩渺的市场中脱颖而出&#xff0c;触达目标消费者&#xff0c;实现品牌与销售的双增长&#xff1f;腾轩科技传媒讲解的整合营销推广正是解决这一问题的关键所在。它不仅仅是一种营销策略&#xff0c;更是一种全新的思维方式&#…

全面分析vcruntime140_1.dll无法继续执行代码的处理方法,3分钟修复vcruntime140_1.dll

如果系统弹出一个错误警告&#xff0c;指出“vcruntime140_1.dll无法继续执行代码”&#xff0c;这通常意味着您的Windows系统中缺失了一个关键的文件&#xff0c;或者该文件已损坏。​vcruntime140_1.dll​是随Visual C Redistributable for Visual Studio 2015, 2017和2019提…

购物车下单实现思路【vue】

文章目录 1、购物车1.1 使用pinia来存储购物车的状态1.2 用户将商品加入购物车的时候 2、点击结算按钮3、封装支付 1、购物车 在购物车页面会有一个点 提示当前购物车内商品的数量购物车内商品的展示购物车内商品的选中 1.1 使用pinia来存储购物车的状态 state: () > ({//…

web游戏-飞机大战

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html> <html lang=&q…

lowcode-engine快速开始

https://lowcode-engine.cn/site/docs/guide/quickStart/intro 安装node 需要node 14.17.0 pnpm安装多个node教程 pnpm env add --global 14.17.0下载demo deomo地址 安装依赖包 切换nodejs版本 pnpm env use --global 14.17.0 node -v切换到demo-general&#xff0c;安…

学习java第一天(下载并配置环境+写第一个java程序)

一.安装 1.下载 直接去官网上选择与你电脑符合的版本下载 官网链接Java Archive Downloads - Java SE 8u211 and later &#xff08;拿我的为例 Windows x64版本&#xff09; ​ 2.然后安装好exe&#xff08;要让自己知道在哪&#xff09; 3.配置环境 大佬链接&#xff1…

特种车日常检修VR虚拟互动培训软件节省大量的教学资源和成本

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐融入了各行各业&#xff0c;其中特种车辆的养护教学也从中受益匪浅。VR虚拟仿真教学在特种车辆养护领域的应用&#xff0c;不仅创新了教学方式&#xff0c;还为提高学员的学习效果和实际操作技能提供了强有力的支持。 特…

【C++】STL简介 | STL六大组件 | string类 | string类对象操作

目录 1. 什么是STL 2. STL的版本 3. STL的六大组件 4. STL的缺陷 5. 引出string类 6. 标准库中的string类 6.1 string类简介 6.2 string类对象的构造 6.3. string类对象的容量 6.4. string类对象的遍历 6.5. string类对象的修改 6.6. string类非成员函数 6.7. vs…

数控机床对滚珠丝杆的要求

随着数控机床高速高精度的发展需求&#xff0c;滚珠丝杆作为数控机床的主要进给功能部件之一&#xff0c;为确保机床传动精度&#xff0c;其选型及安装显得尤为重要&#xff1b;那么&#xff0c;数控机床对滚珠丝杆有什么要求呢&#xff1f; 1、精度保持性&#xff1a;滚珠丝杆…