你好,
我们正在使用3个PSoC在我们的董事会。我们使用CY8C5268AXI-LP047(PSOC5)、CY8C4247AZI M45(PSOC4200 M)和CY8C4245AXI-48(PSoC4200)。
PSoC5通过UsBART连接到PC,并且我使用超级终端发送命令。这些命令包括GPIO写/读。PSOC4200 M(地址:0x0A)和PSoC4200(地址:0x08)通过I2C连接到PSoC5。每当在超级终端中发出GPIO读/写命令时,PSoC5将返回GOPIO写的^ OK或^错误,而对于GPIO读则为低或高。
在硬件中,我们引入了一个作为PSOC5心跳的LED。使用SyBar定时器,LED被设置为每1秒切换一次。这表明PSOC5是完全可操作的。
为了调试我们的板,我做了一个模块化测试,流程如下:
1。PSOC5测试通过I2C发布GPIORAD/WORD命令来读取/写入PSOC5GPIO。USB COM是可以的,结果是意料之中的。
2。PSOC5和PSOC4200 M测试通过I2C发布GPIORAD/WORD命令来读取/写入TopSoC4200 MGPIO。USB COM是可以的。I2C COM是可以的。结果如出一辙。
3、PSOC5、PSOC4200和PSOC4200测试——通过I2C发布/写入命令来读取/写入ToPSoC4200 GPIO。接收到错误。PSOC5悬挂。PSoC5 LED不切换。
I2C代码的I2C奴隶是相同的。我没有预料到PSOC5,PSOC4200 MANDPSoC4200测试的错误。我做了一些调试,并包含了多个PrtoFS在PSoC5 I2C写。见下面的代码摘录:
空I2CyMistRoad编写(UINT8 SLaveAdvor,int i){UbjPrimtf(“rnMr.I2C写尝试…rn”);如果(0U==Read EngMnDead包(SLaveAdvor,I)){UBSPrimTf(“rNMrdIrror I2C尝试成功 rn”);/*从ReS/USPBPRINTF读取响应包(“rNMSTE-RE”)IAD I2C尝试rn);如果(0U==RealStaseBox(SLaveAdvor)){UBSPrimTf(“rnMead读取I2C尝试成功 rn”);Read BuffRealPosig();} {UBSPrimtf(“错误读取缓冲区”));i2c*Cug();UbjCug();} { UBSPrimTf(“rnMrdIrror I2C尝试失败 rn”);}
UINT32写数据包(UINT8 SLaveAdter,IN
ti){
UIT32 32状态=TrimeError;Unt8 Read Err;Char Err= DFEII2C2MistWrraveBuf(SaveAdvor,DFEYI2CBUFW,I,DFEYII2C2MODEIONEXEXEXEXFER);SpIFTF((char *)RES, rn%u错误在DFE主机写rn,WrreEnErr);MP;DFEII2C2MSTATIOWRESCMPLT){}
/*显示传输状态*/IF(0U==(DFEII2I2CYMSTATHELXXFER和DFEII2CMASTSTATUS())){/*检查所有字节是否写入*/IF(DFEII2C2MASTEGETWORTER BUFSIZE()==i){Stase= TrimeSimultMPLT;}否则{UBSPrimtf( rNdfEi2CcMySt.)状态()= %Urn“,dFEII2CYMistStaseUs());
DFEII2CYMistCurrStasuSube();SpRAPTF((CHAR*)RES, RN写命令状态:%LURN”,状态);
我在超级终端上附加了PSOC5响应的图像。
I2CJMistWrreBuffe()API返回0个错误。
I2C*MistStaseUs()API返回162,因此RealEcMeMangDebug返回0xFF或255。我期望在超级终端打印消息“写命令状态:255”之后,应该立即遵循“MaSTeDrimeI2C尝试失败”,但是PSOC5冻结,而我需要对整个
威廉希尔官方网站
进行功率循环以解冻PSoC5。
我已经在这个问题上工作了相当长的一段时间,我仍然陷入困境。谁能指出什么是错的或者我错过了什么?此外,我不能直接提供项目zip文件在
william hill官网
,因为它是不批准我们的客户。然而,我可以通过
电子邮件(KStReN.Gayo@ GungGA.com)转发项目的副本给任何可以帮助的人。
谢谢,
K
PSOC4200 I2C书写
27.9 K