| 62 | | |
| | 62 | == pythonでのテスト == |
| | 63 | |
| | 64 | 以前、帯名さんがHIDデバイスのテストをした時のドキュメントを参考にしてみる。[[br]] |
| | 65 | まずは、FT260の設定を取得してみる。 |
| | 66 | |
| | 67 | {{{ |
| | 68 | oot@beaglebone:~# ipython --nosep |
| | 69 | Python 2.7.9 (default, Aug 13 2016, 17:56:53) |
| | 70 | Type "copyright", "credits" or "license" for more information. |
| | 71 | |
| | 72 | IPython 2.3.0 -- An enhanced Interactive Python. |
| | 73 | ? -> Introduction and overview of IPython's features. |
| | 74 | %quickref -> Quick reference. |
| | 75 | help -> Python's own help system. |
| | 76 | object? -> Details about 'object', use 'object??' for extra details. |
| | 77 | In [1]: import hid |
| | 78 | In [2]: h = hid.device() |
| | 79 | In [3]: |
| | 80 | In [3]: h.open(0x0403, 0x6030) |
| | 81 | In [4]: h.set_nonblocking(1) |
| | 82 | Out[4]: 0 |
| | 83 | In [5]: h.write([0xA1] + [0]*63) |
| | 84 | Out[5]: 64 |
| | 85 | In [6]: h.read(64) |
| | 86 | Out[6]: [] |
| | 87 | In [7]: h.write([0xA0] + [0]*63) |
| | 88 | Out[7]: 64 |
| | 89 | In [8]: h.write([0xA0] + [0]*63) |
| | 90 | Out[8]: 64 |
| | 91 | In [9]: h.read(64) |
| | 92 | Out[9]: [] |
| | 93 | In [10]: h.write([0xA0] + [0]*11) |
| | 94 | Out[10]: -1 |
| | 95 | In [11]: h.write([0xA0] + [0]*63) |
| | 96 | Out[11]: -1 |
| | 97 | In [12]: h.read(64) |
| | 98 | Out[12]: [] |
| | 99 | In [13]: h.read(64) |
| | 100 | Out[13]: [] |
| | 101 | In [14]: h.write([0xA0] + [0]*63) |
| | 102 | Out[14]: -1 |
| | 103 | In [15]: h.write([0xC0] + [0]*63) |
| | 104 | Out[15]: -1 |
| | 105 | In [16]: h.close() |
| | 106 | }}} |
| | 107 | |
| | 108 | うまくいかない、、、[[br]] |
| | 109 | 色々見ていったところ、取得するデータによって使用する関数が違うらしい。[[br]] |
| | 110 | [http://www.ftdichip.com/Support/Documents/ProgramGuides/AN_394_User_Guide_for_FT260.pdf FT260のアプリケーションノート]を見てみると、15ページの{{{4.3 FT260 Report ID List}}}には、 |
| | 111 | |
| | 112 | |
| | 113 | || Report ID || Type || description || |
| | 114 | || 0xA0 || Feature || Chip code || |
| | 115 | || 0xA1 || Feature || System Setting || |
| | 116 | || 0xB0 || Feature || GPIO || |
| | 117 | || 0xB1 || Input || Interrupt Status (from UART interface) || |
| | 118 | || 0xC0 || Feature || I2C Status || |
| | 119 | || 0xC2 || Output || I2C Read Request || |
| | 120 | || 0xD0 ~ 0xDE || Input, Output|| I2C Report || |
| | 121 | || 0xE0 || Feature || UART Status || |
| | 122 | || 0xE2 || Feature || UART RI and DCD Status || |
| | 123 | || 0xF0 ~0xFE ||Input, Output || UART Report || |
| | 124 | |
| | 125 | と書いてあり、{{{Feature}}}へのアクセスは{{{send_feature_report, get_feature_report}}}で行い、{{{INPUT,OUTPUT}}}は{{{write,read}}}で行うらしい。 |
| | 126 | |
| | 127 | |
| | 128 | {{{ |
| | 129 | root@beaglebone:~# ipython --nosep |
| | 130 | Python 2.7.9 (default, Aug 13 2016, 17:56:53) |
| | 131 | Type "copyright", "credits" or "license" for more information. |
| | 132 | |
| | 133 | IPython 2.3.0 -- An enhanced Interactive Python. |
| | 134 | ? -> Introduction and overview of IPython's features. |
| | 135 | %quickref -> Quick reference. |
| | 136 | help -> Python's own help system. |
| | 137 | object? -> Details about 'object', use 'object??' for extra details. |
| | 138 | In [1]: import hid |
| | 139 | In [2]: h = hid.device() |
| | 140 | In [3]: h.open(0x0403, 0x6030) |
| | 141 | In [4]: h.get_feature_report(0xA0,13) |
| | 142 | Out[4]: [160, 2, 96, 2, 0, 2, 96, 1, 0, 1, 1, 3, 0] |
| | 143 | In [5]: h.get_feature_report(0xA1,64) |
| | 144 | Out[5]: |
| | 145 | [161, |
| | 146 | 1, |
| | 147 | 2, |
| | 148 | 0, |
| | 149 | 1, |
| | 150 | 1, |
| | 151 | 0, |
| | 152 | 0, |
| | 153 | 1, |
| | 154 | 3, |
| | 155 | 6, |
| | 156 | 1, |
| | 157 | 1, |
| | 158 | 12, |
| | 159 | 1, |
| | 160 | 0, |
| | 161 | 0, |
| | 162 | 0, |
| | 163 | 0, |
| | 164 | 0, |
| | 165 | 172, |
| | 166 | 0, |
| | 167 | 188, |
| | 168 | 0, |
| | 169 | 204] |
| | 170 | }}} |
| | 171 | |
| | 172 | これでやっと、FT260にアクセスできることが確認できた。[[br]] |
| | 173 | 次にI2C上のスレーブデバイスにアクセス。[[br]] |
| | 174 | |
| | 175 | 接続しているI2Cデバイスは、[http://www.analog.com/jp/products/analog-to-digital-converters/integrated-special-purpose-converters/digital-temperature-sensors/adt7410.html#product-overview ADT7410]を基板化した、[http://akizukidenshi.com/catalog/g/gM-06675/ 秋月電子 ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール]。 |
| | 176 | |
| | 177 | FT260開発ボードの3.3V電源と、IO0,IO1を接続した。 |
| | 178 | |
| | 179 | {{{ |
| | 180 | FT260 <-> ADT7410 |
| | 181 | 3.3V (JP6-1) VDD |
| | 182 | IO0 (JP6-11) SCL |
| | 183 | IO1 (JP6-10) SDA |
| | 184 | GND GND |
| | 185 | }}} |
| | 186 | |
| | 187 | 温度センサのI2Cアドレスは0x48としておく。 |
| | 188 | |
| | 189 | {{{ |
| | 190 | In [1]: import hid |
| | 191 | In [2]: h = hid.device() |
| | 192 | In [3]: h.open(0x0403, 0x6030) |
| | 193 | In [4]: h.set_nonblocking(1) |
| | 194 | Out[4]: 0 |
| | 195 | In [5]: h.write([0xC2, 0x48, 0x06, 0x04, 0x00]) |
| | 196 | Out[5]: 5 |
| | 197 | In [6]: h.read(64) |
| | 198 | Out[6]: [208, 4, 13, 88, 128, 0, 50, 0] |
| | 199 | }}} |
| | 200 | |
| | 201 | 先頭2byteはFT260のHIDコマンドヘッダなので、{{{[13, 88, 128, 0, 50, 0]}}}がデータ。[[br]] |
| | 202 | 取得するデータ数は4byteだけど、6byteデータが出てくる。多分、HIDヘッダも含めて4byte単位でデータが出てくるのだろう。[[br]] |
| | 203 | |
| | 204 | ADT7410のデータシートから、{{{[13, 88]}}}が温度データ、次の{{{[128]}}}がStatus、{{{[0]}}}がConfigurationとなっているようだ。[[br]] |
| | 205 | Configurationの7bit目が1なら16bit,0なら13bitデータになる。[[br]] |
| | 206 | 13bit時のデータは[15:3]が有効なデータなので、計算式は、 |
| | 207 | |
| | 208 | {{{ |
| | 209 | ADC_DEC = ((HSB<<8) | LSB)>>3 |
| | 210 | |
| | 211 | Positive_Temp[℃] = ADC_DEC /16.0 |
| | 212 | Negative_Temp[℃] = (ADC_DEC - 8192)/16 |
| | 213 | }}} |
| | 214 | |
| | 215 | となるらしい。[[br]] |
| | 216 | この計算式に当てはめると、{{{LSB=88,HSB=13}}}の場合、{{{26.6875[℃]}}}となる。[[br]] |
| | 217 | |
| | 218 | 今回は16bitで使いたいので、Configration Registorの7bit目を1にする必要がある。[[br]] |
| | 219 | |
| | 220 | |
| | 221 | |