我們最近使用CH32V305的SPI遇到一點問題,請教一下如何解決。
一、CH32V305作為Master
1.?NSS設(shè)為硬件模式,主循環(huán)中查詢發(fā)送,NSS無電平變化;
主循環(huán)查詢收發(fā)
主機連續(xù)發(fā)送0xA5,從機發(fā)送0x5A,多次發(fā)送后數(shù)據(jù)出錯
從機收到的數(shù)據(jù):
主機收到的數(shù)據(jù):
示波器抓信號,NSS無電平變化,一直是低電平:
2.?將NSS腳設(shè)為IO口,發(fā)送時拉低,收到數(shù)據(jù)后拉高:
現(xiàn)象和1一樣,但是NSS有反應(yīng),但是沒有持續(xù)拉低,見下圖:
放中斷里也是類似的現(xiàn)象
3.?主循環(huán)查詢發(fā)送,中斷接收,NSS波形正常,收發(fā)數(shù)據(jù)正常
CH32V305作為主機,雖然這個狀態(tài)OK,但是實際上還是有點問題的,從機的CPHA是0,主機要設(shè)置成1才能正常收到數(shù)據(jù),但是主機無論CPHA是0還是1收數(shù)據(jù)都是OK的,而且目前最高速度只能設(shè)置成32分頻,再快傳輸就會出錯。
從下圖波形中可以看出,從機是在下降沿,即第一個邊沿去拉MISO,但是主機這邊按照第一個邊沿去讀就始終是錯誤的數(shù)據(jù),沒辦法只能從第二個邊沿去讀數(shù)據(jù)才正常。
CH32V305作為主機有極性問題和傳輸速率問題,那如果設(shè)置成從機會不會有問題呢?
二、?CH32V305作為Slave
CLK為3.3MHz,也是查詢發(fā)送,中斷接收,主機連續(xù)發(fā)送256個字節(jié)的數(shù)據(jù),數(shù)據(jù)詳見下圖,從機一直發(fā)送0xA5
第一包數(shù)據(jù)主從機收到的前面幾個字節(jié)是錯誤的。
第二包數(shù)據(jù)開始正常,但是連續(xù)發(fā)送多包數(shù)據(jù)之后數(shù)據(jù)又出錯了
主機接收數(shù)據(jù):
從機接收數(shù)據(jù):
代碼配置見下圖:
傳輸時,隔一段就會出錯一次
主機在傳送連續(xù)數(shù)據(jù)是,NSS是一直拉低狀態(tài),比如一次性傳輸256個字節(jié),這256個字節(jié)的傳輸期間,NSS都是低電平,CH32V305是否不支持這種連續(xù)數(shù)據(jù)傳輸?
三、問題求解
CH32V305作為從機更符合我們的使用場景,所以麻煩幫忙解答一下以下問題:
1.主機在傳送連續(xù)數(shù)據(jù)是,NSS是一直拉低狀態(tài),比如一次性傳輸256個字節(jié),這256個字節(jié)的傳輸期間,NSS都是低電平,CH32V305是否不支持這種連續(xù)數(shù)據(jù)傳輸?
2.傳輸出錯可能是什么原因?qū)е碌??我們的軟件配置有沒有問題?如何解決出錯的問題?
3.目前高速率傳輸時,數(shù)據(jù)傳輸不穩(wěn)定,高速率SPI傳輸下,需要注意哪些地方?