Hi
i wrote a small test programm, before porting my whole stack to my mbed. I tried it with the hardware SPI class first, it didn't work so i wrote a Software SPI for testing.
#include "mbed.h"
DigitalOut sel(p10);
DigitalIn irq(p9);
DigitalOut sdi(p11);
DigitalIn sdo(p12);
DigitalOut sck(p13);
void InitRFModule()
{
    sel.write(1);
    sdi.write(1);
    sck.write(0);
    wait(1);
    RFWrite(0x80D8);
    RFWrite(0x8201);
    RFWrite(0xA640);
    RFWrite(0xC647);
    RFWrite(0x94A0);
    RFWrite(0xC2AC);
    RFWrite(0xCA81);
    RFWrite(0xCED4);
    RFWrite(0xC483);
    RFWrite(0x9850);
    RFWrite(0xCC77);
    RFWrite(0xE000);
    RFWrite(0xC800);
    RFWrite(0xC040);
    wait(1);
}
short RFWrite(short b)
{
    char i;
    short temp = 0;
    sck.write(0);
    sel.write(0);
    
    for(i = 0; i < 16; i++)
    {
        if(b & 0x8000)
        {
            sdi.write(1);
        }
        else
        {
            sdi.write(0);
        }
        sck.write(1);
        temp <<= 1;
        if(sdo.read())
        {
            temp |= 0x0001;
        }
        sck.write(0);
        b <<= 1;
    }
    sel.write(1);
    return temp;
}
void RFSend(char b)
{
    while(irq.read());
    RFWrite(0xB800 + b);
}
void SEND()
{
    int i;
    char checksum;
    RFWrite(0x0000);
    RFWrite(0x8239);
    checksum = 0;
    RFSend(0xAA);    //Preamble
    RFSend(0xAA);
    RFSend(0xAA);
    RFSend(0x2D);    //Sync HI
    RFSend(0xD4);    //Sync LO
    for(i = 0; i < 16; i++)
    {
        RFSend(0x20 + i);
        checksum += (0x20 + i);
    }
    RFSend(checksum);
    RFSend(0xAA);
    RFSend(0xAA);
    RFSend(0xAA);
    RFWrite(0x8201);
}
int main() 
{
    InitRFModule();
    for(;;)
    {
        wait(1);
        SEND();
    }  
}
it worked well, and my receiver got all the data.
So now im trying to use the hardware SPI class. I added following code
SPI spi(p11, p12, p13);
//modified my RFWrite
short RFWrite(short b)
{
    short temp = 0;
    sel.write(0);
    
    temp = spi.write( b );
    sel.write(1);
    return temp;
}
int main() 
{
    //Added SPI Init to main method
    spi.format( 8, 0 );
    spi.frequency( 125000 );
    //...
}
bot the RF Module doesn't send anything, it doesn't even get initalized.
I cant find my mistake, mode 0 should be right (isn't it?).
can anyone help me out?
 
dominik
                 
             
        
Hi
i wrote a small test programm, before porting my whole stack to my mbed. I tried it with the hardware SPI class first, it didn't work so i wrote a Software SPI for testing.
#include "mbed.h" DigitalOut sel(p10); DigitalIn irq(p9); DigitalOut sdi(p11); DigitalIn sdo(p12); DigitalOut sck(p13); void InitRFModule() { sel.write(1); sdi.write(1); sck.write(0); wait(1); RFWrite(0x80D8); RFWrite(0x8201); RFWrite(0xA640); RFWrite(0xC647); RFWrite(0x94A0); RFWrite(0xC2AC); RFWrite(0xCA81); RFWrite(0xCED4); RFWrite(0xC483); RFWrite(0x9850); RFWrite(0xCC77); RFWrite(0xE000); RFWrite(0xC800); RFWrite(0xC040); wait(1); } short RFWrite(short b) { char i; short temp = 0; sck.write(0); sel.write(0); for(i = 0; i < 16; i++) { if(b & 0x8000) { sdi.write(1); } else { sdi.write(0); } sck.write(1); temp <<= 1; if(sdo.read()) { temp |= 0x0001; } sck.write(0); b <<= 1; } sel.write(1); return temp; } void RFSend(char b) { while(irq.read()); RFWrite(0xB800 + b); } void SEND() { int i; char checksum; RFWrite(0x0000); RFWrite(0x8239); checksum = 0; RFSend(0xAA); //Preamble RFSend(0xAA); RFSend(0xAA); RFSend(0x2D); //Sync HI RFSend(0xD4); //Sync LO for(i = 0; i < 16; i++) { RFSend(0x20 + i); checksum += (0x20 + i); } RFSend(checksum); RFSend(0xAA); RFSend(0xAA); RFSend(0xAA); RFWrite(0x8201); } int main() { InitRFModule(); for(;;) { wait(1); SEND(); } }it worked well, and my receiver got all the data.So now im trying to use the hardware SPI class. I added following code
SPI spi(p11, p12, p13); //modified my RFWrite short RFWrite(short b) { short temp = 0; sel.write(0); temp = spi.write( b ); sel.write(1); return temp; } int main() { //Added SPI Init to main method spi.format( 8, 0 ); spi.frequency( 125000 ); //... }bot the RF Module doesn't send anything, it doesn't even get initalized.I cant find my mistake, mode 0 should be right (isn't it?).
can anyone help me out?
dominik