Changeset 4649


Ignore:
Timestamp:
09/16/08 05:02:47 (5 years ago)
Author:
werner
Message:

Highlights:

  • added CRC7 checking and SDIO R5 SPI response decoding
  • more decoding bugs fixed

Details:

  • lib/crc.py (crc): CRC7 and CRC16 calculation
  • lib/decode.py (d_sdio_cmd, d_crc7_msb): verify CRC7 in SDIO commands
  • lib/decode.py (d_sdio_r5_spi): decoder for SDIO R5 response in SPI mode
  • lib/decode.py (d_sdio_cmd): flag undefined start and stop bits
  • lib/decode.py (decode_address): CIS pointer length is three bytes, not just one
  • lib/decode.py (decode_address): added decoding of Function Basic Registers one
  • lib/decode.py (d_sdio_cmd): unknown arguments were incorrectly treated as invalid
  • demo/dxplore.py: digitizing the analog wave is a waste of time
Location:
developers/werner/ahrt/host/tmc
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • developers/werner/ahrt/host/tmc/demo/dxplore.py

    r4647 r4649  
    2828 
    2929dig = [] 
    30 for wv in w: 
     30for wv in w[1:]: 
    3131    dig.append(wv.digitize(0.5)) 
    3232 
    33 min = dig[1].sample_step() 
    34 for d in dig[2:]: 
     33min = dig[0].sample_step() 
     34for d in dig[1:]: 
    3535    step = d.sample_step() 
    3636    if step is not None and step < min: 
     
    3838 
    3939da = [] 
    40 for d in dig[1:]: 
     40for d in dig: 
    4141    a = d.sample(min) 
    4242#    print len(a) 
     
    4545 
    4646da.reverse() 
    47 dxplore(da, dig[1].start(), min, argv[1]) 
     47dxplore(da, dig[0].start(), min, argv[1]) 
  • developers/werner/ahrt/host/tmc/lib/decode.py

    r4646 r4649  
    1 #!/usr/bin/python 
     1# 
     2# decode.py - Data stream decoders 
     3# 
     4# Copyright (C) 2008 by OpenMoko, Inc. 
     5# Written by Werner Almesberger <werner@openmoko.org> 
     6# All Rights Reserved 
     7# 
     8# This program is free software; you can redistribute it and/or modify 
     9# it under the terms of the GNU General Public License as published by 
     10# the Free Software Foundation; either version 2 of the License, or 
     11# (at your option) any later version. 
     12# 
     13 
     14 
     15import tmc.crc 
     16 
     17 
     18# One CRC instance can be shared by all decoders 
     19 
     20g_crc = tmc.crc.crc() 
    221 
    322 
     
    5372 
    5473def decode_address(addr): 
     74 
     75    # CCCR 
    5576    if addr < 0x14: 
    5677        return ( 
    5778            "Rev", "SDR", "IOE", "IOR", 
    5879            "IEN", "INT", "Abr", "Bus", 
    59             "Cap", "CIS", "Sus", "Sel", 
    60             "EXF", "RDY", "BSZ", "BSZ", 
    61             "PWR", "HSp")[addr] 
     80            "Cap", "CIS", "CIS", "CIS", 
     81            "Sus", "Sel", "EXF", "RDY", 
     82            "BSZ", "BSZ", "PWR", "HSp")[addr] 
     83 
     84    # FBR 
     85    if addr >= 0x100 and addr < 0x800 and (addr & 0xff) < 0x112: 
     86        return ("F%d" % (addr >> 8))+( 
     87            "FIC", "EFC", "Pwr", "RFU", 
     88            "RFU", "RFU", "RFU", "RFU", 
     89            "RFU", "CIS", "CIS", "CIS", 
     90            "CSA", "CSA", "CSA", "DCA", 
     91            "BSZ", "BSZ")[addr & 0xff] 
     92           
    6293    return None 
    6394 
     
    96127 
    97128 
     129def d_crc7_msb(payload): 
     130    crc = 0 
     131    while len(payload): 
     132        v = 0 
     133        for b in range(0, 8): 
     134            if payload[0] == "X": 
     135                return None 
     136            v = (v << 1) | payload.pop(0) 
     137        crc = g_crc.crc7(crc, [v]) 
     138    return crc 
     139 
     140 
    98141def d_sdio_cmd(bits, stop = False): 
    99142    if bits[0]: 
     
    105148        del bits[0] 
    106149 
     150    # We access the payload as soon as the CRC has been read, but possibly 
     151    # before we also have the stop bit. 
     152 
     153    if len(bits) >= 47: 
     154        payload = bits[0:40] 
     155 
    107156    if len(bits) == 0: 
    108157        return s 
     
    112161    if len(bits) == 0: 
    113162        return s 
    114     if bits[0]: 
     163    if bits[0] and bits[0] != "X": 
    115164        s += ">" 
    116165    else: 
     
    139188    arg = d_msb(bits[0:32]) 
    140189    if cmd is None or arg is None: 
    141         arg = None 
    142     else: 
    143         arg = decode_arg(cmd, arg) 
    144     if arg is None: 
    145         s += "("+d_byte_msb(bits)+")" 
    146         if stop: 
    147             return s 
    148     else: 
    149         s += "("+arg+")" 
     190        arg_pretty = None 
     191    else: 
     192        arg_pretty = decode_arg(cmd, arg) 
     193    if arg_pretty is None: 
     194        s += "("+d_byte_msb(bits[0:32])+")" 
     195        if stop and arg is None: 
     196            return s 
     197    else: 
     198        s += "("+arg_pretty+")" 
    150199    del bits[0:32] 
    151200 
     
    160209            return s 
    161210    else: 
    162         s += "CRC%02x" % crc 
     211        s += "CRC%02X" % crc 
     212        check = d_crc7_msb(payload) 
     213        if check is None: 
     214            s += "?" 
     215        elif check != crc: 
     216            s += "/%02X" % check 
    163217    del bits[0:7] 
    164218 
    165219    if len(bits) == 0: 
    166220        return s 
    167     s += ("?", "]")[bits[0]] 
     221    if bits[0] and bits[0] != "X": 
     222        s += "]" 
     223    else: 
     224        s += "?" 
    168225    del bits[0] 
    169226 
     
    183240def d_sdio_resp_sd(bits): 
    184241    return "SDIO" 
     242 
     243 
     244def d_sdio_r5_spi(bits, stop = False): 
     245    if bits[0]: 
     246        s = "~" 
     247    else: 
     248        s = "" 
     249 
     250    while len(bits) and bits[0]: 
     251        del bits[0] 
     252 
     253    if len(bits) == 0: 
     254        return s 
     255    s += "[" 
     256    del bits[0] 
     257 
     258    if len(bits) == 0: 
     259        return s 
     260    if bits[0]: 
     261        s += "Prm" 
     262    else: 
     263        s += "-" 
     264    del bits[0] 
     265 
     266    if len(bits) == 0: 
     267        return s 
     268    if bits[0]: 
     269        s += "???" 
     270        if stop: 
     271            return s 
     272    else: 
     273        s += "-" 
     274    del bits[0] 
     275 
     276    if len(bits) == 0: 
     277        return s 
     278    if bits[0]: 
     279        s += "Fn#" 
     280    else: 
     281        s += "-" 
     282    del bits[0] 
     283 
     284    if len(bits) == 0: 
     285        return s 
     286    if bits[0]: 
     287        s += "Crc" 
     288    else: 
     289        s += "-" 
     290    del bits[0] 
     291 
     292    if len(bits) == 0: 
     293        return s 
     294    if bits[0]: 
     295        s += "Cmd" 
     296    else: 
     297        s += "-" 
     298    del bits[0] 
     299 
     300    if len(bits) == 0: 
     301        return s 
     302    if bits[0]: 
     303        s += "???" 
     304        if stop: 
     305            return s 
     306    else: 
     307        s += "-" 
     308    del bits[0] 
     309 
     310    if len(bits) == 0: 
     311        return s 
     312    if bits[0]: 
     313        s += "Idl" 
     314    else: 
     315        s += "-" 
     316    del bits[0] 
     317 
     318    s += d_byte_msb(bits[0:8]) 
     319    if len(bits) >= 8: 
     320        s += "]" 
     321    if len(bits) > 8 and not stop: 
     322        s += "|"+d_bits(bits[8:]) 
     323 
     324    return s 
    185325 
    186326 
     
    192332    ( "SDIO RESP (SD)",         d_sdio_resp_sd ), 
    193333    ( "SDIO RESP (SPI)",        d_sdio_resp_spi ), 
     334    ( "SDIO R5 (SPI)",          d_sdio_r5_spi ), 
    194335] 
  • developers/werner/ahrt/host/tmc/setup.py

    r4647 r4649  
    66    py_modules = [ "tmc.instrument", 
    77        "tmc.wave", "tmc.trigger", "tmc.shape", 
    8         "tmc.decode", "tmc.dxplore", 
     8        "tmc.crc", "tmc.decode", "tmc.dxplore", 
    99        "tmc.meter", "tmc.scope", "tmc.power", "tmc.function" ], 
    1010    package_dir = { "tmc": "lib" }, 
Note: See TracChangeset for help on using the changeset viewer.