Re: 有關PIC18F425當成SMBUS SLAVER WRITE WORD的問題,請各位幫忙
|
||||
---|---|---|---|---|
初級會員
|
看你的功能,看能只能用软件模拟I2C SLAVE了, 这样我想就可以达到软件控制ACK的目的!
發表於: 2006/11/11 21:06
|
|||
|
Re: 有關smbus的問題
|
||||
---|---|---|---|---|
高級會員
|
嗯,瞭解了,感謝版主詳細的回覆。
發表於: 2006/11/10 18:23
|
|||
|
Re: 有關smbus的問題
|
||||
---|---|---|---|---|
高級會員
|
嗯
謝謝版主的回覆 我怕版主不能瞭解我的問題,所以我重新敘述一次。 我主要的目的是想要我的mcu在當成slaver receiver時能夠有辦法在master產生第九個clk時發送一個nack的信號到bus上。 可能需要如此做的情形如下 情況一: 當bus上有一個start bit後,接下來的address剛好與我的slaver的address匹配,所以slaver發送了一個ack告知master,再接下來master又送出一筆command,我的slaver為了要確認這個command是 有效的所以我必須先把bus上的command與slaver中的command做比較,確定是有效的才發送一個ack給master,否則就要發送一個nack告知master,command是無效的請不要再送下一筆資料了。 情況二: 當bus上的ADDRESS與slaver的address匹配後,命令也正確,之後SLAVER接收了MASTER發送的兩筆資料,與PEC BYTE,那麼如果我想要在ACK PULSE前檢查整筆資料是否有錯誤,如果錯誤,則在ACK PULSE產生時發送NACK,如果正確則在ACK PLUSE產生時發送ACK。 像這類的情況下就必須要在最後接收到的數據後發送一個NACK的信號,不是嗎??? 所以我才會一直認為MCU要能在判斷資料正確與否後發送一個NACK的能力。
發表於: 2006/11/10 15:49
|
|||
|
Re: 有關smbus的問題
|
||||
---|---|---|---|---|
版主
|
ACK 是 I2C Slave 有收到資料所回的低電位,而NACK是指所有的Slave都沒有人理會這個資料料也就不會有 slave 將訊號拉LOW 所以就成了NACK 了
發表於: 2006/11/9 13:40
|
|||
|
Re: 有關smbus的問題
|
||||
---|---|---|---|---|
高級會員
|
我看了SMBUS的標準後,在第九頁及第十頁中有說到
NACK的可能出現的狀態: The slave device is busy performing a real time task, or data requested are not available. The master upon detection of the NACK condition must generate a STOP condidion to abort the transfer........ The slave device detects an invalid command or invalid data. In this case the slave device must NACK the received byte. THe master upon detection of this condition must generate a STOP condition and retry the transcation. If a master-receiver is involved in the transaction it must signal the end of data to the slave-transmitter by generationg an NACK on the last byte that was clocked out by the slave. The slave-transmitter must release the data line to allow the master to generate a STOP condition. 並且參考了這個網址http://tech.digitimes.com.tw/print.as ... 70549D37248256FF900461B44 他說明了SMBUS與IIC在發送ACK/NACK信號上的不同,NACK為SMBUS中強制必備,在IIC中式選擇性的,而也不是只有在ADDRESS不匹配時才會發生,有時候也會在RECEIVER沒有準備好接受BUS上的DATA時,可經由NACK的發送告知TRANSMITTER,目前我是要利用SMBUS當成控制介面,NACK的發送與否對我來說就很重要了,在找尋MCU時我也找了很久才發現PIC系列上好像只有PIC18F之後的系列有寫到支援SMBUS可是如果是不能由使用者判斷何時該送出ACK/NACK的信號時,就沒辦法完全的符合標準所需,不過應該是可以藉由其他的方法來達成的,例如多一支PIN腳來拉低SCL不過還沒試過,所以還不確定,謝謝版主與EBOWANG的討論,讓我一方面能夠加深映象,也能夠發現之前沒有注意到的小細節。
發表於: 2006/11/6 22:03
|
|||
|
Re: 有關smbus的問題
|
||||
---|---|---|---|---|
版主
|
davens 建議先把 I2C 的規範先了解ㄧ下,如果可以的話順便在讀一下 SMbus 與I2C 有何不同。NACK 不是 Slave 回的,Slave會在收到屬於自己的command 後回 ACK, 如果Master送出的 Slave Address不對就不會有人回ACK,這時SDA 回在Hi電位也就是NACK訊號。
ACK訊號Slave會自動答覆,Slave端的軟體不用操心
發表於: 2006/11/6 18:40
|
|||
|
Re: 有關smbus的問題
|
||||
---|---|---|---|---|
高級會員
|
那麼這樣說來,PIC上的IIC硬體介面,在當成SLAVER時,沒有辦法完全符合SMBUS PROTOCOL因為它沒有辦法在必要的時候發送NACK,而且MCU也不能夠只當SLAVER去接收DATA一定還需要具備發送的功能,因為如果發送的COMMAND不是SLAVER中的有效COMMAND還需要由SLAVER想辦法告知MASTER數據送錯了或是命令無效,感覺上就變的不太聰明
因為SMBUS的WRITE WORD PROTOCOL中SLAVER除了發送ACK與NACK信號外,就沒有其他的方式告知MASTER ,BUS上的信號有錯,如果SLAVER還支援PEC的功能,那麼在接收完CRC的數據後,也沒辦法立刻告知MASTER,DATA BYTE中有錯誤需要重送 還是要改成用軟體來實現??又或者需要犧牲一支PIN腳,將SCL拉低 以彌補硬體上的缺陷 謝謝ebowang 與版主提供建議
發表於: 2006/11/6 17:27
|
|||
|
Re: 有關smbus的問題
|
||||
---|---|---|---|---|
初級會員
|
BTFSS SSPSTAT,BF ;依照DATASHEET上的時序圖,BF自動設置時為第八個CLK下緣
GOTO $-1 BCF SSPCON1,CKP ;延長拉低CLK的時間 以上的CODE,与硬件去产生第9个脉冲是异步的并行事件,所以,也许在你CLR CKP时,第9个脉冲已经产生了啊. 不知道我的想法对不对. 其实你完全没必要这样吧,相当与去破坏了I2C通讯的时序(当然我不知道你这样应用的目的)
發表於: 2006/11/6 17:04
|
|||
|
Re: 有關smbus的問題
|
||||
---|---|---|---|---|
版主
|
有關CKP的說明:
PIC的I2C每接收到依筆寫入的資料時( Write Commans + write Data + Write Data+ ...) 在Write Data資料的第九個Clock產生後(Ack) , Slave 就會產生中斷這時硬體會將CKP清為0並將CLK的腳位拉成LOW讓Master暫停送資料過來以免發生Overrun的現象,待Slave處理完畢接收資料後要離開中斷程式前再將CKP設為1後CLK的訊號就會變成Hi這時Master就可以傳送下ㄧ筆資料給Slave了。
發表於: 2006/11/6 16:56
|
|||
|