• Marc Ferland's avatar
    w1: ds2433: add support for ds28ec20 eeprom · 93c4bb36
    Marc Ferland authored
    The ds28ec20 eeprom is (almost) backward compatible with the
    ds2433. The only differences are:
    
    - the eeprom size is now 2560 bytes instead of 512;
    - the number of pages is now 80 (same page size as the ds2433: 256 bits);
    - the programming time has increased from 5ms to 10ms;
    
    This patch adds support for the ds28ec20 to the ds2433 driver. From
    the datasheet: The DS28EC20 provides a high degree of backward
    compatibility with the DS2433. Besides the different family codes, the
    only protocol change that is required on an existing DS2433
    implementation is a lengthening of the programming duration (tPROG)
    from 5ms to 10ms.
    
    dmesg now returns:
    
        w1_master_driver w1_bus_master1: Attaching one wire slave 43.000000478756 crc e0
    
    instead of:
    
        w1_master_driver w1_bus_master1: Attaching one wire slave 43.000000478756 crc e0
        w1_master_driver w1_bus_master1: Family 43 for 43.000000478756.e0 is not registered.
    
    Test script writing/reading random data (CONFIG_W1_SLAVE_DS2433_CRC is
    not set):
    
        #!/bin/sh
    
        EEPROM=/sys/bus/w1/devices/43-000000478756/eeprom
        BINFILE1=/home/root/file1.bin
        BINFILE2=/home/root/file2.bin
    
        for BS in 1 2 3 4 8 16 32 64 128 256 512 1024 2560; do
            dd if=/dev/random of=${BINFILE1} bs=${BS} count=1 status=none
            dd if=${BINFILE1} of=${EEPROM} status=none
            dd if=${EEPROM} of=${BINFILE2} bs=${BS} count=1 status=none
            if ! cmp --silent ${BINFILE1} ${BINFILE2}; then
        	    echo file1
        	    hexdump ${BINFILE1}
        	    echo file2
        	    hexdump ${BINFILE2}
        	    echo FAIL
        	    exit 1
            fi
            echo "${BS} OK!"
        done
    
    Results:
    
        # ./test.sh
        1 OK!
        2 OK!
        3 OK!
        4 OK!
        8 OK!
        16 OK!
        32 OK!
        64 OK!
        128 OK!
        256 OK!
        512 OK!
        1024 OK!
        2560 OK!
    
    Tests with CONFIG_W1_SLAVE_DS2433_CRC=y:
    
        $ cat /proc/config.gz | gunzip | grep CONFIG_W1_SLAVE_DS2433
        CONFIG_W1_SLAVE_DS2433=m
        CONFIG_W1_SLAVE_DS2433_CRC=y
    
        # create a 32 bytes block with a crc, i.e.:
        00000000  31 32 33 34 35 36 37 38  39 3a 3b 3c 3d 3e 3f 40  |123456789:;<=>?@|
        00000010  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e ba 63  |ABCDEFGHIJKLMN.c|
    
        # fill all 80 blocks
        $ dd if=test.bin of=/sys/bus/w1/devices/43-000000478756/eeprom bs=32 count=80
    
        # read back all blocks, i.e.:
        $ hexdump -C /sys/bus/w1/devices/43-000000478756/eeprom
        00000000  31 32 33 34 35 36 37 38  39 3a 3b 3c 3d 3e 3f 40  |123456789:;<=>?@|
        00000010  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e ba 63  |ABCDEFGHIJKLMN.c|
        00000020  31 32 33 34 35 36 37 38  39 3a 3b 3c 3d 3e 3f 40  |123456789:;<=>?@|
        00000030  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e ba 63  |ABCDEFGHIJKLMN.c|
        ...
        000009e0  31 32 33 34 35 36 37 38  39 3a 3b 3c 3d 3e 3f 40  |123456789:;<=>?@|
        000009f0  41 42 43 44 45 46 47 48  49 4a 4b 4c 4d 4e ba 63  |ABCDEFGHIJKLMN.c|
        00000a00
    
    Note: both memories (ds2433 and ds28ec20) have been tested with the
    new driver.
    Signed-off-by: default avatarMarc Ferland <marc.ferland@sonatest.com>
    Co-developed-by: default avatarJean-Francois Dagenais <jeff.dagenais@gmail.com>
    Signed-off-by: default avatarJean-Francois Dagenais <jeff.dagenais@gmail.com>
    Link: https://lore.kernel.org/r/20231218150230.1992448-6-marc.ferland@sonatest.comSigned-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    93c4bb36
w1_ds2433.c 9.58 KB