这是最近一个Case的深刻检讨,这个CASE中我负责MCU这一块.程序主要分位两部分,一部分工作是控制NFC模块,通过他与外界通讯,发送与接受数据,通讯协议软件模拟IIC, 另一部分的工作是与硬盘驱动器通讯,发送与接受数据,通讯协议软件模拟SPI, 其他就是输出LED状态指示. 首先要自我批评,对这个case评估不够准确,尤其是新出来的东西,有用的资料稀少,只有一个DATASHEET和一个简易的寄存器配置Demo程序;第二 英语能够不够,英文资料略读占用时间太长,口语能力不行,不能直接对话;第三在项目经理对这个CASE不能掌控时,没有积极的主动提供援助,看着项目延误太多时间;第四MCU不能自己选择,导致工具不全,采用现有工具开发,然后再移植到指定MCU,不同MCU差异,增加debug时间,效率不高.
嫁接也会出问题--平台移植, 程序虽然都是采用C开放,但是两种MCU他们是不用的体系.IIC的协议,在现有工具的平台上调试正常work, 但是换到指定MCU时,却出现了**.指定的MCU没有仿真平台只能烧录实测.一个是读数据正常,第二个写数据正常,第三个是都数据也正常,第四个还是都数据,在它结束时,送停止信号时SDA数据线出现了不能出高电平 My good !
最终修改ACK的程序,把他解决了.
这是有问题的
// IICwrite ack
SDASETOUT
SCLOUT_0
Delay_Us(5);
SDAOUT_0
Delay_Us(5);
SCLOUT_1
Delay_Us(5);
//IIC NO ack
SDASETOUT
SCLOUT_0
Delay_Us(5);
SDAOUT_1
Delay_Us(5);
SCLOUT_1
Delay_Us(5);
这是修改后的
// IICwrite ack
SCLOUT_0
Delay_Us(5);
SDASETOUT
SDAOUT_0
Delay_Us(5);
SCLOUT_1
Delay_Us(5);
//IIC NO ack
SCLOUT_0
Delay_Us(5);
SDASETOUT
SDAOUT_1
Delay_Us(5);
SCLOUT_1
Delay_Us(5);
万分之一的概率事件,并不是说要一万次才会出现一次. 因为指定的MCU只能烧录实测, 多次重复使用后socket出行的**,突然有个IO出现的接触不良.示波器监控的外部PIn的电平都正常,有问题的IO正好是一个输入PIN, 外部电路出现高低变化,但是因为接触不良,MCU不能捕捉到外部电平变化.更换MCU不能解决,使用示波器直接点到MCUpin才发现这个问题.天啊,怎么会有如此巧的事情.