硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5110|回复: 14
收起左侧

[有问必答] 请教, SPI的NSS怎么用?

[复制链接]

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
发表于 2018-4-19 14:33:13 | 显示全部楼层 |阅读模式
SPI在软NSS的时候调试好了。
设定NSS脚的IO口参数后,打开它的硬NSS属性,SPI就死机了。SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;

我的意图是,stm32是SPI主设备,设定NSS为硬件后,向DR发送数据后,NSS可以自动产生CS信号。 应该怎么设置?


回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2018-4-19 17:56:43 | 显示全部楼层
确保你用的NSS是指的复用引脚。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-4-20 03:00:27 | 显示全部楼层
还有这事,回头我试试看,现在一直用的是软件片选方式。
回复

使用道具 举报

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
 楼主| 发表于 2018-4-23 15:16:56 | 显示全部楼层
本帖最后由 caicaptain2 于 2018-4-23 15:29 编辑

经过多次百度,我自己找到原因了。。。。

硬件NSS的意思和我们理解的不一样。 它只是说可以自动识别主从模式,根据外部给它的电平,它自动切换SPI管脚的主从配置(设置)。 NSS完全不能自动产生CS的信号!所以,大多数SPI读写,都是普通IO模拟的CS。

具体的原因是,SPI通讯模式太复杂的原因。 比如常见的SPI flash,需要一个CS拉低,然后连续几个字节,才能拉高CS。 而SPI DAC类的,需要每个字节后,都拉高CS来确认输出。 所以,当初设计SPI硬件NSS的时候,就没法实现主动CS拉低拉高了。


评分

参与人数 1金币 +50 收起 理由
eric2013 + 50 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-4-24 01:17:37 | 显示全部楼层
caicaptain2 发表于 2018-4-23 15:16
经过多次百度,我自己找到原因了。。。。

硬件NSS的意思和我们理解的不一样。 它只是说可以自动识别主从 ...

回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-4-24 03:41:18 | 显示全部楼层
感谢楼主分享经验。我也一直在怀疑这个东西,但是从来都没有去试过!
回复

使用道具 举报

0

主题

138

回帖

138

积分

初级会员

积分
138
QQ
发表于 2018-5-14 20:25:39 | 显示全部楼层
作从机的时候这个脚就有用了吧
回复

使用道具 举报

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
 楼主| 发表于 2018-5-15 09:29:50 | 显示全部楼层
本帖最后由 caicaptain2 于 2018-5-15 09:31 编辑
wx_D4tOZzZO 发表于 2018-5-14 20:25
作从机的时候这个脚就有用了吧

是这个意思。。。。从机的时候,这个脚主动识别外部高低电平,然后配置自己为输入还是输出。
回复

使用道具 举报

0

主题

5

回帖

24

积分

新手上路

积分
24
发表于 2018-6-5 15:02:45 | 显示全部楼层
请问V3的例程中,使用SPI读写串行flashMX25L1606E的时候,为什么页面大小定义成4K,Flash的一页不应该是256字节吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-6-5 15:04:25 | 显示全部楼层
zhouruimingreen 发表于 2018-6-5 15:02
请问V3的例程中,使用SPI读写串行flashMX25L1606E的时候,为什么页面大小定义成4K,Flash的一页不应该是256 ...

这个是为了方便4K的擦除操作。
回复

使用道具 举报

0

主题

5

回帖

24

积分

新手上路

积分
24
发表于 2018-6-5 15:11:04 | 显示全部楼层
eric2013 发表于 2018-6-5 15:04
这个是为了方便4K的擦除操作。

MX25L1606E的手册上的page program不是一次最多只能写256字节,写多了再从当前页的起始地址开始写吗?很纳闷一次写4096个字节还正常写入了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-6-5 15:17:06 | 显示全部楼层
zhouruimingreen 发表于 2018-6-5 15:11
MX25L1606E的手册上的page program不是一次最多只能写256字节,写多了再从当前页的起始地址开始写吗?很 ...

你没有理解到点上,我说的是块擦除,SPI类的flash一般都是以4K,32K,64K等为单位进行擦除的。跟你说的256字节page大小没有关系。我们为了擦除方便专门搞的。
回复

使用道具 举报

0

主题

5

回帖

24

积分

新手上路

积分
24
发表于 2018-6-5 15:25:55 | 显示全部楼层
eric2013 发表于 2018-6-5 15:04
这个是为了方便4K的擦除操作。

不好意思,是我没看清楚程序,卡到页面大小这儿没往下看,底层的也写入也是256字节写入的,谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-6-5 15:28:01 | 显示全部楼层
zhouruimingreen 发表于 2018-6-5 15:25
不好意思,是我没看清楚程序,卡到页面大小这儿没往下看,底层的也写入也是256字节写入的,谢谢

可以看下这个帖子,我进行了详细总结:
http://www.armbbs.cn/forum.php?m ... 8&highlight=SPI
回复

使用道具 举报

0

主题

5

回帖

24

积分

新手上路

积分
24
发表于 2018-6-5 15:41:27 | 显示全部楼层
eric2013 发表于 2018-6-5 15:28
可以看下这个帖子,我进行了详细总结:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=13848&h ...

嗯嗯,十分感谢!
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 14:45 , Processed in 0.210038 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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