主题:ESM3354中应用SPI的问题 共有33037人关注过本帖 |
---|
lqluo |
1楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
ESM3354中应用SPI的问题 Post By:2017-5-9 10:13:00 [显示全部帖子]
我所用的ESM3354系统是linux
有三个问题: 我在应用SPI时,把ESM3354做为slave,把fpga做为主机。时钟选择了12.5M。发送数据为16位,DB15先发送 (1) 用fpga发送后,在用ESM3354的函数接收到的数据是8位的,显示是低8位在前,高8位在后。是这样的吗? (2) 我一次用fpga要发送160K(16位)的数据,怎么把每个数的起始位对位? 我的意思是说:我发送完一个16位数据后,如果ESM3354只收到15位。我再发送下一个16位数, 结果ESM3354没识别出来这是一个新的数据,还把它刚接收到的DB15当成上一个数的DB0。这样后面所有接收的数都是错的。 这种情况下怎么处理? (3) 我电路板中只有一个SPI,ESM3354做为从机时,SPI的cs信号还有用吗? |
单帖管理 | 引用 | 回复 |
lqluo |
2楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2017-5-9 20:42:00 [显示全部帖子]
我是想这样:主机想发送一个数据包给ESM3354,希望发送初始时ESM3354处于初始状态:
即假设这时ESM3354接收过程中出现错误,还没接收完一个完整的16位数据(比如只接收完15位),还在等主机送来的时钟, 而这时主机送过来的第一个时钟是本应该对应新数据的DB15,而不是对应上一个数据位(比如DB0),但ESM3354会把它当作对应上一个数据位(比如DB0)的时钟。这样后面所有的数据都会出错。 所以我希望主机给ESM3354一个信号时,比如外部中断,能让ESM3354的SPI恢复初始状态。 或者说,每次主机在令cs变低后发送完16个时钟,然后令cs变高,如果此次esm3354没接收到16个时钟,而检测到cs变高,esm3354会怎么处理这种情况? [此贴子已经被作者于2017-5-9 22:14:35编辑过]
|
单帖管理 | 引用 | 回复 |
lqluo |
3楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2017-5-10 15:19:00 [显示全部帖子]
我是在主机fpga运行时,从机esm3354更新程序后再运行。此时ESM3354与主机就失去了同步,丢失了很多时钟。
所以我想知道:在运行中如果发生错误,如何恢复。 不能因为一个时钟错误,后面再发给SPI的数据,结果SPI接收到全是错的。假设这一次发送的数据包我可以丢弃,但后面所有的数据包不能丢弃啊。 |
单帖管理 | 引用 | 回复 |
lqluo |
4楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2017-5-10 15:21:00 [显示全部帖子]
给我的感觉是一旦spi错误一次,以后spi就不能恢复正常了,也没法用了。
|
单帖管理 | 引用 | 回复 |
lqluo |
5楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2017-5-11 13:16:00 [显示全部帖子]
那我每秒向ESM3354发送300K数据,1天24小时不停的发,每天送几十G的数据存入硬盘。设备一运行可能就是几个月,发送的数据是几个T。 中间要是出现一个时钟误差,设备就没法传送正常的数据了。是这样吗? |
单帖管理 | 引用 | 回复 |
lqluo |
6楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2017-5-11 17:11:00 [显示全部帖子]
焦点主要在: ESM3354知道数据接收错了,怎么才能让ESM3354接收一下个数据包的时候不受前面的状态的影响?也就是说,让ESM3354的spi口在接收下一数据包前恢复初始状态,即它接收的一下个数据包的第一个时钟是新数据的DB15,而不是旧数据的DB0
|
单帖管理 | 引用 | 回复 |
lqluo |
7楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2017-5-12 9:24:00 [显示全部帖子]
怎样复位ESM3354的SPI?
|
单帖管理 | 引用 | 回复 |