大佬们帮我看看我这MicroPython代码有什么问题
<p>要做的是用ESP32S3作为主机与一个安全芯片进行SPI通信,目前的问题是:数据成功发出,安全芯片也成功返回数据,但其返回的0x55我ESP没有收到</p><p> </p>
<p>芯片资料给出的通信流程如下图</p>
<div style="text-align: center;"></div>
<div style="text-align: center;"> </div>
<div>我的代码如下,测试用代码,大佬们帮看看有什么问题</div>
<div>
<pre>
<code class="language-python">from machine import Pin, SPI
from time import sleep_us
class myESAM():
def __init__(self):
self.sck = Pin(11, Pin.PULL_UP)
self.mosi = Pin(13, Pin.PULL_UP)
self.miso = Pin(12)
self.spi = SPI(1, sck=self.sck, mosi=self.mosi, miso=self.miso, baudrate=5000000,polarity=1, phase=1)
self.nss = Pin(10, Pin.OUT, Pin.PULL_UP)
def start(self):
_thread.start_new_thread(self.read,())
self.nss.value(0)
sleep_us(100)
buf =
self.spi.write(buf)
sleep_us(5)
self.nss.value(1)
sleep_us(10)
self.nss.value(0)
sleep_us(100)
while True:
inBuf = bytearray(1)
self.spi.readinto(inBuf)
if inBuf != b'\x55':
sleep_us(20)
continue
print(inBuf)
inBuf = bytearray(20)
self.spi.readinto(inBuf)
print(inBuf)
sleep_us(5)
self.nss.value(1)
sleep_us(10)
break
m = myESAM()
m.start()
</code></pre>
<p> </p>
</div>
<p> </p>
<p>安全芯片 SPI 工作方式采用 MODE 3,时钟极性(CPOL=1),串行同步时钟的空闲状态为高电平,时钟相位(CPHA=1),在串行同步时钟的下降沿转换数据,上升沿采样数据。</p>
<p>支持频率为5Mhz-20Mhz</p>
<p>大召唤术 <span class="mentions">@dcexpert </span> </p>
<p>看看是我的写法有问题吗,第一次用ESP的SPI,搞不懂啊</p>
<p>片选需要在通信过程中拉高一次?</p>
<p>不清楚你芯片的时序要求,可以试试 spi.write_readinto(txdata, rxdata) 函数,写入同时读取。</p>
dcexpert 发表于 2024-9-29 20:48
不清楚你芯片的时序要求,可以试试 spi.write_readinto(txdata, rxdata) 函数,写入同时读取。
<p>忘了加时序图,现补上,发送是同时读取也试过,读回来的全是0</p>
<div>紫色为 MOSI、黄色为 SSN、绿色为 CLK、红色为 MISO</div>
<div style="text-align: center;"></div>
<p> </p>
<div class='shownolgin' data-isdigest='no'>wangerxian 发表于 2024-9-29 17:38
片选需要在通信过程中拉高一次?
<p>这个芯片特殊,比较奇怪,不过按他的要求步骤走,他确实返回数据了,可我没接到</p>
</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <div class='shownolgin' data-isdigest='no'>极限零 发表于 2024-9-30 09:02
这个芯片特殊,比较奇怪,不过按他的要求步骤走,他确实返回数据了,可我没接到
<p>是通过抓波形确认它确实返回数据吗?</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>wangerxian 发表于 2024-9-30 09:37
是通过抓波形确认它确实返回数据吗?
<p>是的,但是我这只有单通道的示波器,所以目前时序还搞不清楚</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>极限零 发表于 2024-9-30 09:52
是的,但是我这只有单通道的示波器,所以目前时序还搞不清楚
<p>可以搞个便宜的逻辑分析仪,几十块,抓时许还是很有用的。</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>wangerxian 发表于 2024-9-30 10:22
可以搞个便宜的逻辑分析仪,几十块,抓时许还是很有用的。
<p>已经提了,公司买东西时间比较长。。。。。</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>极限零 发表于 2024-9-30 09:00
忘了加时序图,现补上,发送是同时读取也试过,读回来的全是0
紫色为 MOSI、黄色为 SSN、绿色为 CLK、 ...
<p>如果有波形而读取不到数据,可以多检查IO设置、波特率、spi相位等参数。</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>极限零 发表于 2024-9-30 10:30
已经提了,公司买东西时间比较长。。。。。
<p>那盲猜不好猜问题,micropython可以调试吗?</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>dcexpert 发表于 2024-9-30 10:48
如果有波形而读取不到数据,可以多检查IO设置、波特率、spi相位等参数。
<p>下午去隔壁楼借了个示波器,搞明白了,我用的是SPI1,就是HSPI,而管脚是自定义的,只有第一次运行时,完全正常,其后只要不改SPI初始化的代码,不管是怎样都不能再收到数据,掉电重启也不行</p>
<p>我改用SPI2后,就完全正常了</p>
<p>不知道是不是BUG,而且用SPI1时,设置的频率与实际频率也不符,我设置的5MHz,示波器看只有4MHz,后来我设成10MHz,示波器只有9MHz</p>
<p>感谢 <span class="mentions">@dcexpert </span>@wangerxian </p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>极限零 发表于 2024-9-30 14:35
下午去隔壁楼借了个示波器,搞明白了,我用的是SPI1,就是HSPI,而管脚是自定义的,只有第一次运行时,完 ...
<p>看来是固件的bug</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'><p>【设置的频率与实际频率也不符,我设置的5MHz,示波器看只有4MHz】有没可能是SPI1用的时钟源不同?</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>wangerxian 发表于 2024-9-30 15:22
【设置的频率与实际频率也不符,我设置的5MHz,示波器看只有4MHz】有没可能是SPI1用的时钟源不同?
<p>但是我SPI2又正常,我是ESP32S3-WROOM-1U,这里有好几个时钟源吗</p>
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>极限零 发表于 2024-9-30 15:26
但是我SPI2又正常,我是ESP32S3-WROOM-1U,这里有好几个时钟源吗
<p>ESP32好像时钟源基本不用配置,那就不知道是什么问题了</p>
</div><script>showreplylogin();</script>
页:
[1]