作者查詢 / TWkobe
作者 TWkobe 在 PTT [ Electronics ] 看板的留言(推文), 共76則
限定看板:Electronics
看板排序:
全部basketballTW470Grad-ProbAsk423Gossiping384graduate344Tech_Job111Electronics76SENIORHIGH62NBA56Soft_Job53Beauty43Jeremy_Lin41C_and_CPP38PHX-Suns37NCKU28ASM17TWICE17MuscleBeach14Knicks13Cavaliers12Immigration6movie6Chinese5GraduateCram4L_TalkandCha4Master_D4basketball3DragonBall3NTU3Old-Games3EAseries2home-sale2KoreanPop2NBAEasyChat2PlayStation2Stock2Tainan2Taoism2XBOX2AfterPhD1Board-Police1book1Cad_Cae1Chiayi1FJU-Laws991FoodDelivery1GameDesign1japanavgirls1Lineage1Linux1Math1MobileComm1NBAGAME1Oversea_Job1painting1PhotoEdit1Programming1PttHistory1Python1sex1shoes1studyteacher1SuperHeroes1Taoyuan1Teacher1V_ScHooL1Volunteer1WorkinChina1worldbasket1<< 收起看板(68)
首頁
上一頁
1
下一頁
尾頁
5F推: 應該是說interrupt沒辦法真正達到atomic operation,使09/05 14:55
6F→: data race的情況會發生09/05 14:55
7F→: 所以要確保interrupt期間不會發生 不然就要引入critical09/05 14:56
8F→: section了09/05 14:56
1F推: 那個control byte就是24LC16這個slave addr只是後面3個是09/04 20:55
2F→: control bit09/04 20:56
3F→: 至於會不會不一樣 有可能啊他分成8個block當然addr會不一09/04 20:57
4F→: 樣 後面的word address是寫入eeprom的目標位置09/04 20:58
6F推: 1:是 然後當你發完addr至master, master會發一個ack bit07/17 22:06
7F推: 2:如果你會解析bq76920的時序 你量sda,scl也可以知道07/17 22:09
8F→: 你可以飛線至bq76920的sda,scl連至你一個要用的mcu07/17 22:11
9F推: sorry打太快說反, 是第一次發addr時, slave會回傳ack bit07/17 22:24
1F推: 要看哪一種flash 有些是block erase06/20 23:16
2F推: 其實具體來說 用sector或block來erase怎麼實作看廠商06/20 23:23
3F→: 不過你說的page erase似乎是page program? 小弟沒看過06/20 23:24
4F→: 有錯請指正06/20 23:24
5F推: sector erase沒有到整面erase這麼大,整面已經是chip erase06/21 00:08
2F推: 不用global也可以 就用pointer處理不就好了06/08 19:44
1F推: 你的理解沒錯 通常官方libs有個pin define05/31 16:40
2F→: 通常會幫你弄好很多的macro 可以設定某個腳為什麼樣的態05/31 16:42
3F→: 使用i2c前正確的設定好各個腳的態後, 再賦值給相對應的pin05/31 16:42
4F→: 為0或1即可05/31 16:43
5F→: 然後有些你說的register名稱 我沒用過pic不清楚05/31 16:44
6F→: 還有傳給SSP1BUF我猜那是硬體i2c用的data buffer, 原理大05/31 16:44
7F→: 概就是要將傳送的資料先寫入至此buffer, 硬體會自動將裡面05/31 16:45
8F→: data再行傳輸出去, 是比較穩當保險的做法05/31 16:46
9F→: 至於用software simulate的i2c就是直接控制腳來傳送05/31 16:46
10F→: 所以運作原理跟官方用的硬體i2c當然不同05/31 16:47
11F→: 我只能幫到此, 因為我沒用過這系列mcu就是了XD05/31 16:48
1F推: 有先確定接線都符合spec規範?05/28 22:23
2F推: mcu有先量過gpio產生的方波符合spec的要求?05/28 22:29
3F推: 看spec這i2c是write/read的basic function看page 3405/28 22:33
4F→: slave addr就是你這個外部設備的地址05/28 22:33
5F→: 你看p16有寫要符合方波的要求05/28 22:35
6F推: address high/low 應該只是一次接收量不夠分high low05/28 22:39
7F→: 實際上還是當作address而已05/28 22:39
10F推: CRC是校驗碼, 偶爾會因為有雜訊造成data錯誤 利用這個可以05/28 22:51
11F→: 簡單還原正確的data05/28 22:51
12F推: 地址是0x60, 但實際上只要餵7bit address, 有些可以直接給05/28 22:55
13F→: 0x60, 有些要手動shit 1bit05/28 22:55
14F→: 我是有遇過要手動shift的05/28 22:55
16F→: 你就弄一個#define addr 0x6005/28 22:56
17F→: #define addr_msg addr>>105/28 22:56
18F→: 實驗看看需不需要手動移, 正確的話,slave端會回傳一個ack05/28 22:57
19F→: 至於pic的講的應該是他的libs作法, 我習慣先自己寫一個05/28 22:58
20F→: software i2c function先驗證是否正確05/28 22:58
22F→: 還有p16重點是看此裝置的i2c是active high or low05/28 23:00
23F→: 通常是看start signal, 這spec看起來是active low05/28 23:01
24F→: 意思是說sda先low一段時間後, 接著scl開始low05/28 23:04
25F→: 弄個虛擬碼你大概就知道怎麼做05/28 23:05
26F→: void swi2c_START (int delyTime) {05/28 23:05
27F→: sda_set(); delay_us(delayTime);05/28 23:07
28F→: scl_set(); delay_us(delayTime);05/28 23:08
29F→: sda_clear(); delay_us(delayTime);05/28 23:08
30F→: scl_clear(); delay_us(delayTime); }05/28 23:09
31F推: 然後再弄一個swi2c_WRITE(int msg) {05/28 23:12
32F→: int data=msg; for(int i=0; i<8; i++) {05/28 23:13
33F→: if(data & 0x01) sda_set(); else sda_clear(); delay;05/28 23:16
34F→: data >= 1; }05/28 23:16
35F→: 這個function 可以用來解析要寫入的data來控制sda05/28 23:17
36F→: 例如要寫入的slav_addr / reg_index / write_data都可用到05/28 23:19
37F→: 最後再湊一個swi2c_writeMSG function來組合完整的write05/28 23:21
38F→: sequence05/28 23:21
39F→: 寫好後拿示波器量測scl/sda是否有符合完整個write signal05/28 23:22
40F→: 當你完成寫入上述三者都應該會在sda看到正確的ack signal05/28 23:23
41F推: 還有pic說給完address就給data的說法為何跟你spec不同的05/28 23:26
42F→: 原因是你裝置spec的reg_index/write_data也是data呀05/28 23:27
43F→: 不是因此i2c有何不同, i2c是標準大家都差不多, 只差在餵的05/28 23:28
44F→: data會不同 所以pic官方才說直接後面給data05/28 23:28
45F→: 剩下的就可以依據我說的弄出read的完整function了05/28 23:30
46F推: 我忘了說msg之間的w/r bit是幹嘛05/28 23:34
47F→: 這個是說接下來要對slave裝置是要進行read或write動作05/28 23:35
48F推: 然後在說一下read sequence, 比較複雜一點05/28 23:37
49F→: 他等於要先對slave寫入address/reg_index後05/28 23:38
50F→: 結束一次i2c再重新restart寫入地址, 接著就重slave端讀取05/28 23:39
51F→: sda signal05/28 23:39
首頁
上一頁
1
下一頁
尾頁