hollobon/the-bus-pirate

V4 SPI_sniffer: wrong (1) and skipping every second read (or wrong reads) when using (2) macro

Opened this issue · 0 comments

What steps will reproduce the problem?

1. Use atmega32 (internal 8MHz) and compile following code

#define F_CPU 8000000UL
#include<avr/io.h>
#include<util/delay.h>


void Inicjacja_spi(void)
{
    DDRB = ( 1 << PB4 ) | ( 1 << PB5 ) | ( 1 << PB7 );              //MOSI, SCK, SS' jako wyjścia
    SPCR = ( 1 << SPE ) | ( 1 << MSTR ) | ( 1 << SPR1 ) | ( 1 << SPR0 );   //Włączamy SPI,    

}                                                                         


void Wyslij_spi(char bajt)
{
    SPDR = bajt;
    while( ! bit_is_set( SPSR, SPIF ) )
}                           

int main(void)
{
    char bajt = 0;
    Inicjacja_spi();
    while(1)
    {
        Wyslij_spi(bajt);
        _delay_ms(250);
        _delay_ms(250);
        _delay_ms(250);
        _delay_ms(250);
        bajt++;
    }
    return 0;
}

2. Use (1) or (2) macro


What is the expected output? What do you see instead?

Print incremented value every 1s. Using (1) macro, few first reads are ok, 
after some random time i see 2s interval and wrong data are read from SPI bus, 
but when i hit enter and run macro again, it's again ok for some random time. 
When using (2) macro, sniffer skips every second byte.


What version of the product are you using? On what operating system?

Windows 7 - V4 firmware v6.1 r1676 (same thing happen on r2151)


Please provide any additional information below.

Terminal dump:

SPI>i
Bus Pirate v4
Firmware v6.1 r1676
DEVID:0x1019 REVID:0x0004 (24FJ256GB106 UNK)
http://dangerousprototypes.com
CFG0: 0xFFFF CFG1:0xFFFF CFG2:0xFFFF
*----------*
Pinstates:
#12     #11     #10     #09     #08     #07     #06     #05     #04     #03     
#02     #01
GND     5.0V    3.3V    VPU     ADC     AUX2    AUX1    AUX     CS      MISO    
CLK     MOSI
P       P       P       I       I       I       I       I       O       I       
O       O
GND     0.00V   0.00V   0.00V   0.00V   L       L       L       L       L       
L       H
POWER SUPPLIES OFF, Pull-up resistors OFF, Open drain outputs (H=Hi-Z, L=GND)
MSB set: MOST sig bit first, Number of bits read/write: 8
a/A/@ controls CS pin
SPI (spd ckp ske smp csl hiz)=( 4 0 1 0 1 1 )
*----------*
SPI>(1)
Sniffer
Any key to exit
[0x00(0x00)0x01(0x00)0x02(0x00)0x03(0x00)0x04(0x00)0x05(0x00)0x06(0x00)0x07(0x00
)0x08(0x00)0x09(0x00)0x0A(0x00)0x0B(0x00)0x0C(0x00)0x0D(0x00)0x0E(0x00)0x0F(0x00
)0x10(0x00)0x11(0x00)0x12(0x00)0x13(0x00)0x14(0x00)0x15(0x00)0x16(0x00)0x17(0x00
)0x18(0x00)0x19(0x00)0x1A(0x00)0x1B(0x00)0x1C(0x00)0x1D(0x00)0x1E(0x00)0x1F(0x00
)0x20(0x00)0x21(0x00)0x22(0x00)0x23(0x00)0x24(0x00)0x25(0x00)0x26(0x00)0x27(0x00
)0x28(0x00)0x29(0x00)0x2A(0x00)0x2B(0x00)0x2C(0x00)0x2D(0x00)0x2E(0x00)0x2F(0x00
)0x30(0x00)0x31(0x00)0x32(0x00)0x33(0x00)0x34(0x00)0x35(0x00)0x36(0x00)0x37(0x00
)0x38(0x00)0x39(0x00)0x3A(0x00)0x3B(0x00)0x3C(0x00)0x3D(0x00)0x3E(0x00)0x3F(0x00
)0x40(0x00)0x41(0x00)0x42(0x00)0x43(0x00)0x44(0x00)0x45(0x00)0x46(0x00)0x47(0x00
)0x48(0x00)0x49(0x00)0x4A(0x00)0x4B(0x00)0x4C(0x00)0x4D(0x00)0x4E(0x00)0x4F(0x00
)0x50(0x00)0x51(0x00)0x52(0x00)0x53(0x00)0x54(0x00)0x55(0x00)0x56(0x00)0x57(0x00
)0x58(0x00)0x59(0x00)0x5A(0x00)0x5B(0x00)0x5C(0x00)0x5D(0x00)0x5E(0x00)0x5F(0x00
)0x60(0x00)0x61(0x00)0x62(0x00)0x63(0x00)0x64(0x00)0x65(0x00)0x66(0x00)0x67(0x00
)0x68(0x00)0x69(0x00)0x6A(0x00)0x6B(0x00)0x6C(0x00)0x6D(0x00)0x6E(0x00)0x6F(0x00
)0x70(0x00)0x71(0x00)0x72(0x00)0x73(0x00)0x74(0x00)0x75(0x00)0x76(0x00)0x77(0x00
)0x78(0x00)0x79(0x00)0x7A(0x00)0x7B(0x00)0x7C(0x00)0x7D(0x00)0x7E(0x00)0x7F(0x00
)0x80(0x00)0x81(0x00)0x82(0x00)0x83(0x00)0x84(0x00)0x85(0x00)0x86(0x00)0x87(0x00
)0x88(0x00)0x89(0x00)0x8A(0x00)0x8B(0x00)0x8C(0x00)0x8D(0x00)0x8E(0x00)0x8F(0x00
)0x90(0x00)0x91(0x00)0x92(0x00)0x93(0x00)0x94(0x00)0x95(0x00)0x96(0x00)0x97(0x00
)0x98(0x00)0x99(0x00)0x9A(0x00)0x9B(0x00)0x9C(0x00)0x9D(0x00)0x9E(0x00)0x9F(0x00
)0xA0(0x00)0xA1(0x00)0xA2(0x00)0xA3(0x00)0xA4(0x00)0xA5(0x00)0xA6(0x00)0xA7(0x00
)0xA8(0x00)0xA9(0x00)0xAA(0x00)0xAB(0x00)0xAC(0x00)0xAD(0x00)0xAE(0x00)0xAF(0x00
)0xB0(0x00)0xB1(0x00)0xB2(0x00)0xB3(0x00)0xB4(0x00)0xB5(0x00)0xB6(0x00)0xB7(0x00
)0xB8(0x00)0xB9(0x00)0xBA(0x00)0xBB(0x00)0xBC(0x00)0xBD(0x00)0xBE(0x00)0xBF(0x00
)0xC0(0x00)0xC1(0x00)0xC2(0x00)0xC3(0x00)0xC4(0x00)0xC5(0x00)0xC6(0x00)0xC7(0x00
)0xC8(0x00)0xC9(0x00)0xCA(0x00)0xCB(0x00)0xCC(0x00)0xCD(0x00)0xCE(0x00)0xCF(0x00
)0xD0(0x00)0xD1(0x00)0xD2(0x00)0xD3(0x00)0xD4(0x00)0xD5(0x00)0xD6(0x00)0xD7(0x00
)0xD8(0x00)0xD9(0x00)0xDA(0x00)0xDB(0x00)0xDC(0x00)0xDD(0x00)0xDE(0x00)0xDF(0x00
)0xE0(0x00)0xE1(0x00)0xE2(0x00)0xE3(0x00)0xE4(0x00)0xE5(0x00)0xE6(0x00)0xE7(0x00
)0xE8(0x00)0xE9(0x00)0xEA(0x00)0xEB(0x00)0xEC(0x00)0xED(0x00)0x77(0x00)0x7F(0x00
)0x87(0x00)0x8F(0x00)0x97(0x00)0x9F(0x00)0xA7(0x00)0xAF(0x00)0xB7(0x00)0xBF(0x00
)0xC7(0x00)0xCF(0x00)0xD7(0x00)0xDF(0x00)0xE7(0x00)0xEF(0x00)0xF7(0x00)0xF8(0x00
)0x00(0x00)0x08(0x00)0x10(0x00)0x18(0x00)0x20(0x00)0x28(0x00)0x30(0x00)0x38(0x00
)0x40(0x00)0x48(0x00)0x50(0x00)0x58(0x00)0x60(0x00)0x68(0x00)0x70(0x00)0x78(0x00
)0x80(0x00)0x88(0x00)0x90(0x00)0x98(0x00)0xA0(0x00)

SPI>(1)
Sniffer
Any key to exit
[0x17(0x00)0x18(0x00)0x19(0x00)0x1A(0x00)0x1B(0x00)0x1C(0x00)0x1D(0x00)0x1E(0x00
)0x1F(0x00)0x20(0x00)0x21(0x00)0x22(0x00)0x23(0x00)0x24(0x00)0x25(0x00)0x26(0x00
)0x27(0x00)0x28(0x00)0x29(0x00)0x2A(0x00)0x2B(0x00)0x2C(0x00)0x2D(0x00)0x2E(0x00
)0x2F(0x00)0x03(0x00)0x13(0x00)0x23(0x00)0x33(0x00)0x43(0x00)0x53(0x00)0x63(0x00
)

SPI>(2)
Sniffer
Any key to exit
[0x76(0x00)0x78(0x00)0x7A(0x00)0x7C(0x00)0x7E(0x00)0x80(0x00)0x82(0x00)0x84(0x00
)0x86(0x00)0x88(0x00)0x8A(0x00)

Original issue reported on code.google.com by rch...@gmail.com on 23 Apr 2014 at 11:48