找回密码
 立即注册
查看: 674|回复: 8

使用mosi和miso可交换的spi,模拟sd模式时序单线读写sd/tf卡的设想

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-18 11:30:56 | 显示全部楼层 |阅读模式
本帖最后由 zrl 于 2024-11-19 15:21 编辑

0.为什么有这个设想:因为spi和sd的单线读写非常相似,甚至你可以使用单片机的硬件spi对sd卡在sd模式下实现其初始化
1.这种方法对比SPI直接读取sd卡有什么优势:据站内网友的测试sd卡在dma-spi下只能到3MB/s,这个速度是class0速度,也就是时钟频率最大25MHz,而SD模式下,使用CMD6命令切换到高速模式,卡时钟频率可以到50Mhz。
而在sd卡的spi模式是不支持这条命令的。
2.为什么只是设想:因为我手头上只有8h8k64u,它不支持mosi和miso的交换
3.有什么劣势:sd卡的sd模式与spi模式的一个不同点就是,spi模式会他会确保你每次主机硬件spi读取到一个完整的字节,但是sd模式不会,数据准备好只要符合规范时序下一个时钟就可以发,所以不可避免的要使用gpio去模拟时钟进行补偿,不然读到的一个字节,大概率会在不同的两个地方


速度表的数据是在4线模式下的最差性能,除4才是单线的速度
截图202411181117045915.jpg
截图202411181118323518.jpg
截图202411181136076641.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-18 11:38:30 | 显示全部楼层
本帖最后由 zrl 于 2024-11-18 11:39 编辑

写命令
将spi的sclk引脚与sd卡的CLK相连,mosi与CMD相连,通过mosi就可以直接向sd卡写命令
截图202411181139342769.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-18 11:42:45 | 显示全部楼层
读响应
发完命令后将mosi与miso调换,然后关闭spi,让主机操纵sclk口发送时钟直到在CMD上读取到0,后再发送7个时钟,接着启动spi读取响应数据
截图202411181142199949.jpg
截图202411181142431426.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-18 11:48:23 | 显示全部楼层
读数据
mosi与CMD相连,miso与DAT0相连,主机向卡发送CMD17,然后关闭spi,让主机操纵sclk口发送时钟直到在DAT0上读取到0,接着启动spi读取数据
截图202411181148211996.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-18 11:49:13 | 显示全部楼层
本帖最后由 zrl 于 2024-11-18 13:37 编辑

写数据
mosi与CMD相连,miso与DAT0相连,主机向卡发送CMD24,交换mosi和miso然后发送8个空时钟,数据线上硬件spi发送0xFE,接着写数据,写完数据发送0xFF。单线crc16可以使用硬件crc16直接计算
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-18 11:52:50 | 显示全部楼层
本帖最后由 zrl 于 2024-11-18 12:10 编辑

卡的初始化
实现了写命令和读响应,就可以实现卡的初始化,但是stc的spi不像stm32的spi一样可以大范围调整时钟速率,而卡的初始化又要求时钟频率不高于400k,所以又两种方法
方法一,主机模拟半双工3线spi(实际上没有cs),写命令和读响应,完成初始化。
方法二,先让外设的频率低于400k,然后再调整时钟设置,使其达到最大值
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-18 11:56:51 | 显示全部楼层
当然你也可以使用两个io,控制CMD和CLK写命令和读响应,然后用硬件的QSPI读写数据。速度应该至少快3倍,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-04-30 08:22:37

14

主题

87

回帖

732

积分

高级会员

积分
732
发表于 2024-11-18 11:59:26 | 显示全部楼层
class10支持的最高时钟频率为50MHz,不知道这样的spi什么时候上市,当然这只是一个设想,能不能成,性能怎样还要看具体情况
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-11-18 20:00:31 | 显示全部楼层
AI8051U的 MOSI/MISO 通过设置SFR 来交换
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:35 , Processed in 0.136248 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表