串行總線那些坑,你留意了嗎?
比如,I2C總線忘了接上拉電阻,串口波特率不匹配,RS485忘了進(jìn)行方向切換或者沒有接終端匹配電阻,USB全速和低速模式該在哪根線加上拉、下拉電阻傻傻分不清(現(xiàn)在上下拉電阻都集成到處理器內(nèi)部,以后不會再被坑了)等等。我們的一位客戶最近就被SWD總線坑了一把,來看看他是怎么入的坑,又是怎么跳出的坑吧。
這位客戶用編程器通過SWD總線對一款Cortex-M0芯片進(jìn)行編程時(shí),由于無法進(jìn)入測試模式而無法對芯片編程。束手無策之下,客戶找到了我們。我們的時(shí)序工程師仔細(xì)分析芯片數(shù)據(jù)手冊后,發(fā)現(xiàn)該芯片編程時(shí)序的握手環(huán)節(jié)和其他芯片有明顯區(qū)別,因此我們猜測客戶的編程器很可能是和芯片握手失敗才無法進(jìn)入測試模式。
下圖是芯片握手時(shí)序圖,可以看出時(shí)序要求非常嚴(yán)格。只要總線握手成功,芯片進(jìn)入測試模式,編程器即可獲取芯片ID,并可以對芯片編程。如果總線握手失敗,芯片就會開始執(zhí)行片內(nèi)Flash的用戶代碼而無法進(jìn)行編程。
由于芯片的時(shí)鐘精度、boot code文件大小不同,因此不同版本芯片的內(nèi)部復(fù)位時(shí)間、boot code執(zhí)行時(shí)間都有差異。為了確保芯片能正常進(jìn)入測試模式,我們在將芯片時(shí)序添加到致遠(yuǎn)電子最新推出的4通道在線脫機(jī)編程器P800-ISP上時(shí),進(jìn)行了特殊處理:當(dāng)P800-ISP向芯片發(fā)出復(fù)位信號后,立即重復(fù)發(fā)送SWD總線復(fù)位信號,直到獲取芯片的應(yīng)答。SWD總線建立連接后,P800-ISP通過設(shè)置芯片的TST_CTRL寄存器,使芯片進(jìn)入測試模式,之后就可以對芯片的Flash正常編程了。
總結(jié):
有了這個(gè)工具,串行總線應(yīng)用不再是難題。
評論