2014年8月16日 星期六

關於new peripheral bus one btle(wireless) _1

前言 :

之前有一篇我提到了"關於 peripheral bus”有那些要注意的地方.

image

而這個不只是單單地指有線部份, 就有無線系統也應有該考量.

這裡以一個案例為示,讓我重新自我反省整個無線系統的了解.

keywrod :

系統設計, 整合, 有線/無線

 

 

專案X:

有一個玩具產品想加bluetooth 做更好的應用. 這樣的產品是常見及一般性的.

這裡我將它分成玩具產品(A) 及 bluetooth(B)

它的規格大約地就是類似spi方式(bit bang)做處理, 先由A的某根pin腳發出clk 及 data,再由B 去接收並發送給手機端.

這裡我的同事並沒有去針對接收端 B 的能力了解, 像是thoughput 及synchronous的部份.

例如 : 因是bit bang方式,所以 A 的thoughput可以有多少, bits/sec ; 而在 B 中的接收能力又有多少 ? (這裡我們以連續動作為主.)

我們知道的"采樣定理" , 接收端至少要二倍以上的頻率sample and hold,才能完整地成形原本的資料.

而這個系統中, 有二個介面 ; 一為gpio ; 二 是無線通訊 部份. 剛好是有線/無線 的合成..:)

無論是先去做無線介面的設計 或 有線部份的設計都是可以的, 但有一個有衝突到則就必須要回到原點.

 

 

前題 :

建立 ,驗証平台

1 . 有線部份的, gpio 接收能力 . 下列是我針對我實驗平台(nRF51)的gpio 對於中斷的處理能力的數據 .

最後得出, GPIO interrupt

最快-sample rate 8Khz

( gpio lentecy) == 44us

image

 

所以, 是 1K bytes /sec的能力. 換算下來是, 1bits @ 0.25ms. 故 A 中輸出能力 最好能在0.5 K bytes/sec以下.

若無法逹到目標值,只能改以 並列(Parallel方式處理) 來增加thouthput能力 以達到設計規格.

ex :

規格中,指定為 4K bytes/ sec的話, 我們就得必須利用到9 根gpio pin來進行處理.(1 clk ; 8 data)

 

接下來,我會在下一篇討論無線的部分內容

關於new peripheral bus and btle(wireless) _2

專案X:
有一個玩具產品想加bluetooth 做更好的應用. 這樣的產品是常見及一般性的.
這裡我將它分成玩具產品(A) 及 bluetooth(B)
它的規格大約地就是類似spi方式(bit bang)做處理, 先由A的某根pin腳發出clk 及 data,再由B 去接收並發送給手機端.

keywrod :
系統設計, 整合, 有線/無線

在上一篇中,我去分析了對於第一個介面的分析, 我們得出下列結論,
O. sample rate 8KHz(0.125 ms)
A. 其有線部分, 其thoughput 為0.5 KBytes/Sec (1bit @ 0.25ms==>4Kbits/Sec ==>0.5KBytes/Sec)
B. 示規格要求,去增加gpiote pin ( x N)
C. 最終,仍要看無線部份的能力決定.

我在再分為ADV MODE 及CONN MODE ,而CONN_MODE再下一篇會提到

2. 無線系統(以BTLE 為介面)
這裡不像是有線部分,可以去增加i/o來做為輸加thoughput 能力. 需依照所使用的無線系統及應用層上做出評估.
(也來是為何在我們的另外一個案子(語音) 是外加另一個chip做encode 的功能, )
說實在的,在這之前 我從未認真想過關於這一部份的事. 原由是因為不了解它的重要性 及 必要性 .
而對於無線通訊系統(BTLE)上, 只關注在於 它的協定及理論上 . 沒有將它和系統做結合.
接下來, 我借由BTLE Sniffer 及相關硬體來做驗証測試動作. 分為Adv Mode and Connect Mode.
並且在每次的radio Action / nAction 去togger io 來判斷其動作 . 這裡我先不去深討其關於這顆nRF chip的radio spec.內容.
我們先只驗証它的現象出來再來設計/計算內容.
2A. BTLE Adv time Mode
image_thumb[8]
從上面的可以看得出當 radio notification 時,它的gpiote 會失效的(空白處)
而且它出現的時間點也相當地頻繁(52 ms) ~ 20 Hz.
我去更詳細地去查看它的內容,如下
image_thumb[11]
這邊,我們看出有三~四個 斷點出現及 整個radio action時段有3.7ms 長度會使用其gpiote受到影響.
得到下列的內容 及疑間:
1. 其出現的頻率20Hz, 是否可設定 ?
2. 共估有3.7 ms的時間, 是否有其它的長度 ?
3. 有三/四個斷點出現. 每個斷點之間的關係為何?

那麼要去理清這些疑間, 我們得由另一面向來看它了.即BTLE Sniffer內容
image_thumb[13]


配合一般關於BTLE的ADV 內容如下一起來看比較清楚它的內容
image_thumb[15]
image_thumb[17]
Q:

1. 其出現的頻率20Hz, 是否可設定 ?
2. 共估有3.7 ms的時間, 是否有其它的長度 ?
3. 有三/四個斷點出現. 每個斷點之間的關係為何?

A:
這些資訊,可以回答我們什麼了..?對於問題3及2 都足夠得到答案了.
Q3 . 其斷點間,與BTLE之間並無任何關係. 這留在之後附錄去討論soc radio spec.
       其每一個封包(無論是是ADV_IND ,SCN_REQ 及SCN_RSP)其應有相同的波形得知.

Q2. 3.7ms的時間外, 是否有其它的長度? 這也將決定出其在ADV MODE下的thoughput
(決定出有線的thoughput(bits/sec)) , 由下列各封包長度來看即可得到了.
它是有不同長度的封包, 而wrose case 是ADV_IND . 它根據量測到的有 3.7mS .
image
image
image

A1.是否可改變它的Adv freqence ?
     這裡我看到的是,它並不是跟著ADV interval timing來動作的. 一般下會每隔adv interval timing來發出adv_inv
但除了adv type 有多種多, 還有是若你lightblue沒去也enable它,會使得它一直發出adv_ind
image

我得到了初步的結論, 關於有線及無線方面上對於專案X的影有那些.
"
若要求在ADV_IND中,也要去sample gpio 的反應時,以同樣的要求8KHz
在發出ADV_IND時,將會使得lost sample導致,產品錯誤輸出(致少lost 30 sample )
為了不使之lost 下,wrose case 要變成 270 Hz . (1bit) ,而且這個是無法去借由增加gpiote pin來改善的
"
所以,在ADV_IND下是不應該做相關的動作的. 或者由硬体方面去處理串串FIFO的處理才可能滿足要求.

關於new peripheral bus and btle(wireless) _3

專案X:
有一個玩具產品想加bluetooth 做更好的應用. 這樣的產品是常見及一般性的.
這裡我將它分成玩具產品(A) 及 bluetooth(B)
它的規格大約地就是類似spi方式(bit bang)做處理, 先由A的某根pin腳發出clk 及 data,再由B 去接收並發送給手機端.
keywrod :
系統設計, 整合, 有線/無線

在前二篇中,我分析,得出下列結論,
O. sample rate 8KHz(0.125 ms)
A. 其有線部分, 其thoughput 為0.5 KBytes/Sec (1bit @ 0.25ms==>4Kbits/Sec ==>0.5KBytes/Sec)
B. 示規格要求,去增加gpiote pin ( x N)
C. 最終,仍要看無線部份的能力決定.
D.若要考量ADV MODE下,其sample 將降致270Hz ,其thoughput 16 Bytes/Sec
    或由加硬体FIFO'cache 解.

驗証它的現象出來再來設計/計算內容.
2B. BTLE Connect  Mode
對於connect mode 下, 我想要知道是在不同的GATT Characteristic properties *1及它會在何時傳送出去.
它相對於adv mode不同的是它是在某種相較下穩定情況的動作. 而對應用來看, 也應該是以它為標準去做評估.
首先是, 針對最常見的Notify properties 對於gpiote反應 及在connect interval 下對timing的影響.
image
image
對於上二張圖中, 我們可以得知某些事.
它和adv MODE中一樣, 它有會造成gpiote有著3~4 斷點產生. 及相較於adv mode中影響長度較短.
第一點得需在之後配合nRF51的 Radio spec對照; 而第二點則只知它的封包長度有關.

而我去試著capatch 封包傳遞follow, 來看對於Notify properties 是在何時傳送及它對timing影響為何?
image

image

image
image
整理了上面的圖示內容 .有了
i . 不論在connect interval中, 傳送幾個package . 其傳送時間點均為固定時間
ii. 只有在時間點, 會去影響gpio .其它時間它將全交由radio處理.
iii. 不同的時段內,需要傳送封包個數是要依照應用決定. 並由這裡決定出最大的thougput.
iv. 依藉nRF51 radio spec. 最大一個timing 點可以傳6個封包.

將上面的資訊,總整一下 . 可得出下列條件出來.
1. 在這應用中, 其最大的sample rate 及 thoughput .
    依connect mode下, 其最大的sample rate 需大於1.75mS(1.8mS) 即555Hz .
    約可以得277 bits/sec ,34Bytes/Sec.

2. 對於nRF51中,若不論其它的條件下最大的thoghput
   iOS, connect interval min 8ms , 6 package , package size 20 Bytes.
   ==>;1.5K Bytes/Sec .

*1 其它的GATT Characteristic properties
image
*附加附檔
https://drive.google.com/file/d/0B2uYQcUgyMUJLUdPcEVXRTVuRGc/edit?usp=sharing
https://drive.google.com/file/d/0B2uYQcUgyMUJTjFBUDl0N3dMYzg/edit?usp=sharing
https://drive.google.com/file/d/0B2uYQcUgyMUJUk5yNkF6a2ppMVU/edit?usp=sharing
https://drive.google.com/file/d/0B2uYQcUgyMUJbkZCNU9hUlBSZjQ/edit?usp=sharing
https://drive.google.com/file/d/0B2uYQcUgyMUJaG0zRThmeGpScEU/edit?usp=sharing
https://drive.google.com/file/d/0B2uYQcUgyMUJVUxLX3M4TlJscTQ/edit?usp=sharing
專案檔
https://drive.google.com/file/d/0B2uYQcUgyMUJNnVEOUF2WmVuUTA/edit?usp=sharing
https://drive.google.com/file/d/0B2uYQcUgyMUJb0VMUG1fMTc3eDQ/edit?usp=sharing

2014年8月4日 星期一

Enumeration Constants vs. Constant Objects

keywork:

lvalues vs. rvalues , constants,storage duration ,linkage and symbolic constants/constant objects

 

今日,有同事問我有關Enumeration Constants問題. 而我也順便整理一下關於constant variable的相關資訊.

在C中常見的有, #define (macro) , enum , constant variable 等...而它們之間的不同之處又有那些及如何選擇適當的

這個可以由下列幾點來說明之:

  1. lvalue and rvalue
  2. storage duration/linkage
  3. symbolic constant /constant object

首先, 應可先分為symbolic constant 及 constant object二類.即是要當作一個symbolic 或是 object來處理.

一般symbolic 大多是使用macro ,即#define來處理,大多是定義在所屬的 標頭檔中(*.h).並且是preprocess

 

而另一類則為constant object,因為是object物件. 所以它必須compiler去處理的.

而它的優缺則需由其它點來說明(lvalue/rvalue and storage druation/linkage)及說明使用時機.

macro(define) :

1.

它是在preprocess處理的,compilers don't preserve macro names among the symbols they pass on to their debuggers.

即去檢查它的內容及對檔案的內容的影響, 只有當compiler階段時才出現問題並且不好檢查出來.因為它是

只有作一個動作,取代(*.lst). 因此它並不會去影響ram/rom/proformce .又可讓使用者看見.

2.

macro names don't observe the scope rules,無論它是宣告在那一個scope (file/function/local)它均變為global .所以它的影響是

全部的.

 

enum :

它對上述的(macro)作了加強,因為它是屬於compiler state處理的,因此若有問題時可以由compiler debugger檢查出來的.

並且它是具有scope rule的.這會讓使用者不用誤用它.

它是屬於object的(non -modifiction rvalue) ,並且有一個重要的缺少是"它只能是整數值"

因為它是non-modification rvalue,所以它也不可以被reference 到其它point.

#define max 16
..
oid sort(int a[], size_t max);
 
//becomes:
 
oid sort(int a[], size_t 16); 
 
#define BUFFER_SIZE 256
har buffer[BUFFER_SIZE];
 
//You can use this simplified form of enumeration definition to define any integer-valued constant, such as:
 
num { buffer_size = 256 };
 
//this defines buffer_size as the integer constant 256. An enumeration constant is a compile-time constant, so you can use it as an array dimension, as in:
 
har buffer[buffer_size]; 

 


ref:


Enumeration Constants vs. Constant Objects


http://www.embedded.com/electronics-blogs/programming-pointers/4023879/Enumeration-Constants-vs-Constant-Objects


Symbolic Constants


http://www.embedded.com/electronics-blogs/programming-pointers/4023858/Symbolic-Constants