【正文】
used as an interrupt source to provide information on how many bytes that are in the RX FIFO and TX FIFO respectively. The =0*02 and =0*03 configurations are associated with the TX FIFO. See Table 41 for more information. b) SPI Polling The PKTSTSTUS register can be polled at a given rate to get information about the current GDO2 and GDO0 values respectively. The RXBYTES and TXBYTES registers can be polled at a given rate to get information about the number of bytes in the RX FIFO and TX FIFO respectively. Alternatively, the number of bytes in the RX FIFO and the TX FIFO can be read from the chip status byte returned on the MISO line each time a header byte, data byte, or mand strobe is sent on the SPI bus. It is remended to employ an interrupt driven solution since high rate SPI polling reduces the RX sensitivity. Furthermore, as explained in Section and the CC1101 Errata Notes[4], when using SPI polling, there is a small, but finite, probability that a single read from registers PKSTATUS, RXBYTES and TXBYTES is being corrupt. The same is the case when reading the chip status byte. Refer to the TI website for SW examples ([9] and [10]). 10 數(shù)據(jù)包處理 的 硬件支持 CC1101 提供了對(duì)數(shù)據(jù)包導(dǎo)向無(wú)線協(xié)議的內(nèi)置硬件支持。 可將其復(fù)制以生成一個(gè) 4 字節(jié)同步字(推薦)。 ? 通過(guò)數(shù)據(jù)字段計(jì)算的 CRC 校驗(yàn)和。另外,數(shù)據(jù)字段和可選 2 字節(jié) CRC 校驗(yàn)和可執(zhí)行下列操作: ? 利 用 PN9 序列進(jìn)行數(shù)據(jù)白化 ? 通過(guò)使用數(shù)據(jù)交錯(cuò)和編碼(卷積碼)實(shí)現(xiàn)前向糾錯(cuò) (FEC) 接收模式下,數(shù)據(jù)包處理支持功能將通過(guò)執(zhí)行如下操作(如果已開(kāi)啟)解析數(shù)據(jù)包: ? 前導(dǎo)檢測(cè) ? 同步字檢測(cè) ? CRC 計(jì)算與 CRC 校驗(yàn) ? 一字節(jié)地址檢查 ? 數(shù)據(jù)包長(zhǎng)度檢查(對(duì)可編程最大長(zhǎng)度進(jìn)行長(zhǎng)度字節(jié)檢查) ? 去白 ? 去交錯(cuò)與解碼 可以選擇將兩個(gè)帶有 RSSI 值、鏈路質(zhì)量指示以及 CRC 狀態(tài)的狀態(tài)字節(jié)(請(qǐng) 參見(jiàn)表 27 和表 28)都加入 RX FIFO 中。 1 數(shù)據(jù)白化 從無(wú)線通信角度來(lái)看,無(wú)線數(shù)據(jù)傳輸?shù)睦硐肭闆r是隨機(jī)和 DC 自由。 實(shí)際數(shù)據(jù)通常會(huì)包含許多 0 和 1 的長(zhǎng)序列。 有了 CC1101 , 這 項(xiàng) 工 作 可 自 動(dòng) 地 完 成 。在接收機(jī)端,數(shù)據(jù)由相同的偽隨機(jī)序列進(jìn)行異或運(yùn)算。 PN9 序列被全部初始化為 1。前導(dǎo)的最小長(zhǎng)度是可以通過(guò) 的值進(jìn)行編程的。當(dāng)編程的前導(dǎo)字節(jié)數(shù)被發(fā)送完畢時(shí),調(diào)制器就開(kāi)始發(fā)送同步字,然后發(fā)送來(lái)自 TX FIFO 的數(shù)據(jù)(如果是有效數(shù)據(jù)的話)。調(diào)制器隨后將發(fā)送同步字,然后發(fā)送數(shù)據(jù)字節(jié)。同步字提供了輸入數(shù)據(jù)包的字節(jié)同步。通過(guò)設(shè)置 =3 或 7 亦可能仿真一個(gè) 32 位同步字。 CC11001 可支持固定數(shù)據(jù)包長(zhǎng)度協(xié)議和可變數(shù)據(jù)包長(zhǎng)度協(xié)議。對(duì)更長(zhǎng)的數(shù)據(jù)包而言,必須使用無(wú)長(zhǎng)度限制的數(shù)據(jù)包模式。理想的數(shù)據(jù)包長(zhǎng)度由 PKTLEN 寄存器來(lái)設(shè)置。 在可變數(shù)據(jù)包長(zhǎng)度模式下,即 =1,通過(guò)同步字后面的第一個(gè)字節(jié)來(lái)配置數(shù)據(jù)包長(zhǎng)度。 PKTLEN 寄存器用于設(shè)置 RX 模式中允許的最大數(shù)據(jù)包長(zhǎng)度。 =2 時(shí),數(shù)據(jù)包長(zhǎng)度設(shè)置為無(wú)限,發(fā)送和接收工作將繼續(xù)進(jìn)行,直到手動(dòng)關(guān)閉為止。您應(yīng)該確定, TX 模式在任何字節(jié)前半部分發(fā)送過(guò)程中都沒(méi)有關(guān)閉。 請(qǐng)注意:支持的最小數(shù)據(jù)包長(zhǎng)度(不包括可選長(zhǎng)度字節(jié)和 CRC)為有效負(fù)載數(shù) 據(jù)的一個(gè)字節(jié)。結(jié)合固定數(shù)據(jù)包長(zhǎng)度模式 (=0),此舉實(shí)現(xiàn)了支持可變長(zhǎng)度數(shù)據(jù)包以外不同長(zhǎng)度域配置的可能性(在可變包長(zhǎng)度模式下,長(zhǎng)度字節(jié)就是同步字之后的第一個(gè)字節(jié))。 MCU 讀出足夠的字節(jié)以解釋數(shù)據(jù)包中的長(zhǎng)度域。當(dāng)數(shù)據(jù)包處理器中的字節(jié)計(jì)數(shù)器相當(dāng)于 PKTLEN 寄存器時(shí),便到達(dá)了數(shù)據(jù)包的末端。 數(shù)據(jù)包長(zhǎng)度 255 數(shù)據(jù)包自動(dòng)控制寄存器 PKTCTRL0 可以在 TX 和 RX 模式下完成重新編程,這樣一來(lái)就使得發(fā)送和接收長(zhǎng)于 256 字節(jié)的數(shù)據(jù)包成為可能,并且還可以利用數(shù)據(jù)包處理硬件支持。在 TX 端,將 PKTLEN 寄存器設(shè)置為 mod (length, 256)。當(dāng)數(shù)據(jù)包剩余字節(jié)少于 256 字節(jié)時(shí), MCU 關(guān)閉無(wú)限數(shù)據(jù)包長(zhǎng)度模式,并開(kāi)啟固定數(shù)據(jù)包長(zhǎng)度模式。另外,還可使用自動(dòng) CRC 添14 加 /校驗(yàn)(通過(guò)設(shè)置 =1)。 ? 設(shè)置 =0 ? 數(shù)據(jù)包計(jì)數(shù)器達(dá)到 88 時(shí)結(jié)束發(fā)送。 數(shù)據(jù)包處理器的內(nèi)部字節(jié)計(jì)數(shù)器從 0 計(jì)數(shù)到 255,然后再?gòu)? 0 開(kāi)始計(jì)數(shù)。 地址濾波 設(shè)置 為 0 以外的任何值便可開(kāi)啟數(shù)據(jù)包地址濾波器。如果接收到的地址匹配一個(gè)有效地址,則接收該數(shù)據(jù)包,并將其寫入 RX FIFO。 使用無(wú)限數(shù)據(jù)包長(zhǎng)度模式并且地址濾波開(kāi)啟時(shí),如果 接收到的地址匹配一個(gè)有效地址,那么 0xFF 便會(huì)被寫入 RX FIFO,之后是地址字節(jié),最后是有效負(fù)15 載數(shù)據(jù)。如果接收到的長(zhǎng)度字節(jié)具有一個(gè)比該允許的長(zhǎng)度更大值,則丟棄該數(shù)據(jù)包,并且重新啟動(dòng)接收模式(與 設(shè)置無(wú)關(guān))。如果 CRC 校驗(yàn)失敗, CRC 自動(dòng)刷新功能將會(huì)刷新整個(gè) RX FIFO。 當(dāng)使用自動(dòng)刷新功能時(shí),可變數(shù)據(jù)包長(zhǎng)度模式下的最大數(shù)據(jù)包長(zhǎng)度為 63 字節(jié) , 而 固 定 數(shù) 據(jù) 包 長(zhǎng) 度 模 式 下 則 為 64 字 節(jié) 。由于 CRC 校驗(yàn)失敗時(shí)整個(gè) RX FIFO 被刷新,之前接收到的數(shù)據(jù)包必須在接收當(dāng)前數(shù)據(jù)包以前從 FIFO 讀取出來(lái)。 4 發(fā)送模式下的數(shù)據(jù)包處理 必須要將即將要被發(fā)送的有效負(fù)載寫入 TX FIFO 中。長(zhǎng)度字節(jié)具有一個(gè)與數(shù)據(jù)包有效負(fù)載相當(dāng)?shù)闹担ò蛇x地址字節(jié))。如果開(kāi)啟了固定數(shù)據(jù)包長(zhǎng)度,則寫入 TX FIFO 的第一個(gè)字節(jié)應(yīng)為地址字節(jié)(假設(shè)接收機(jī)使用了地址識(shí)別)。如果 TX FIFO 中的數(shù)據(jù)可用,則調(diào)制器會(huì)發(fā)送 2 字節(jié)(可選 4 字節(jié))同步字,之后是 TX FIFO 中的有效負(fù)載。如果 TX FIFO 在發(fā)送完全部數(shù)據(jù)包以前變?yōu)榭眨敲丛摕o(wú)線電設(shè)備將進(jìn)入 TXFIFO_UNDERFLOW 狀態(tài)。 在 出現(xiàn)下溢以后對(duì) TX FIFO 進(jìn)行寫操作并不會(huì)重啟 TX 模式。這一工作在可選 FEC/交錯(cuò)以前便完成。 如果開(kāi)啟了 FEC/交錯(cuò),同步字之后的所有數(shù)據(jù)將被調(diào)制以前編碼的交錯(cuò)和 FEC 加密編碼。 5 接收模式下的數(shù)據(jù)包處理 在接收模式下,解調(diào)器和數(shù)據(jù)包處理器將會(huì)搜索一個(gè)有效的前導(dǎo)和同步字。若 FEC/交錯(cuò)開(kāi)啟,則 FEC 解碼器將開(kāi)始對(duì)第一個(gè)有效負(fù)載字節(jié)進(jìn)行解碼。 如果白化功能開(kāi)啟了,則在這個(gè)階段數(shù)據(jù)將被去白。數(shù)據(jù)包處理器把這個(gè)值作為數(shù)據(jù)包長(zhǎng)度存儲(chǔ),并接收該長(zhǎng)度字節(jié)顯示數(shù)目的字節(jié)。 接下來(lái),數(shù)據(jù)包處理器隨意地校驗(yàn)地址,并在地址匹配時(shí)才繼續(xù)進(jìn)行接收。 在有效負(fù)載末端,數(shù)據(jù)包處理器將隨意寫入 2 個(gè)包含 CRC 狀態(tài)、鏈路質(zhì)量指示和 RSSI 值的額外數(shù)據(jù)包狀態(tài)字節(jié)(請(qǐng)參見(jiàn)表 25 和表 26)。另外,數(shù)據(jù)包長(zhǎng)度大于 64 字節(jié)時(shí),需要在 RX 模式下讀取 RXFIFO,需要在 TX 模式下重填 TX FIFO。獲得該必要狀態(tài)信息的解決方案有如下兩種: a) 中斷驅(qū)動(dòng)法 當(dāng)通過(guò)設(shè)置 =0x06 接收到 /發(fā)送出一個(gè)同步字或接收到17 /發(fā)送出一個(gè)完整數(shù)據(jù)包時(shí),在 RX 和 TX 模式下均可使用 GDO 引腳來(lái)實(shí)現(xiàn)中斷。 =0x00 和 =0x01 兩 種 配 置 與 RXFIFO 相關(guān),而 =0x02 和 =0x03 則與 TX FIFO 相關(guān)??梢阅硞€(gè)給定速率對(duì) RXBYTES 和 TXBYTES 寄存器輪詢,以獲取 RX FIFO 和 TX FIFO 中所含字節(jié)數(shù)的相關(guān)信息。 推薦使用中斷驅(qū)動(dòng)方法,因?yàn)楦咚? SPI 輪詢可降低 RX 靈敏度。讀取芯片狀態(tài)字節(jié)時(shí)情況相同。