Доброго времени суток, форумчане.
Вот уже пару дней бьюсь над проблемкой, не выходит "каменный цветок".
Собственно проблема в следующем, пытаюсь работать с акселерометром в микросхеме LSM030C, именно с интексом "C"!!!
Пытаюсь для начала вычитать регистр с ID - и не выходит, точнее выхлоп содержит незначащий байт (DUMMY_BYTE).
Вот исходники, может кто-то уже работал с этим "зверем", помогите, направте на путь истинный

CODE
#define NSS_TRUE GPIO_SetBits ( SPIx_NSS_GPIO_PORT, SPIx_NSS_PIN )
#define NSS_FALSE GPIO_ResetBits ( SPIx_NSS_GPIO_PORT, SPIx_NSS_PIN )
#define READbit ( ( uint8_t ) 0x80 )
#define DUMMY_BYTE ( ( uint8_t ) 0x5A )
// Настраиваем и включаем SPI
spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi.SPI_Mode = SPI_Mode_Master;
spi.SPI_DataSize = SPI_DataSize_8b;
spi.SPI_CPOL = SPI_CPOL_Low;
spi.SPI_CPHA = SPI_CPHA_1Edge;
spi.SPI_NSS = SPI_NSS_Soft;
spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
spi.SPI_FirstBit = SPI_FirstBit_MSB;
spi.SPI_CRCPolynomial = 7;
SPI_Init ( SPIx_OPEN, &spi );
SPI_CalculateCRC ( SPIx_OPEN, DISABLE );
SPI_NSSInternalSoftwareConfig ( SPIx_OPEN, SPI_NSSInternalSoft_Set );
SPI_Cmd ( SPIx_OPEN, ENABLE );
// инициализация LSM303C
SPI_Mems_Write_Reg ( CTRL1_A, ( XYZ_ENABLE | CTRL1_BDU_ENABLE ) );
SPI_Mems_Write_Reg ( CTRL4_A, ( LSM303C_ACC_SPI_RWMODE | \
LSM303C_ACC_I2C_DISABLE | \
ADRESS_INCREMENT) );
uint8_t SPI_Mems_SendByte ( uint8_t byte )
{
// Loop while DR register in not emplty
while ( SPI_I2S_GetFlagStatus ( SPIx_OPEN, SPI_I2S_FLAG_TXE ) == RESET );
// Send byte through the SPI1 peripheral
SPI_I2S_SendData ( SPIx_OPEN, byte );
// Wait to receive a byte
while ( SPI_I2S_GetFlagStatus ( SPIx_OPEN, SPI_I2S_FLAG_RXNE ) == RESET );
return SPI_I2S_ReceiveData ( SPIx_OPEN );
}
uint8_t SPI_Mems_Read_Reg ( uint8_t reg )
{
uint8_t Temp;
Temp = reg | READbit; //reading procedure has to set the most significant bit
// Select Mems Sensor: Chip Select low
NSS_FALSE;
// Send Register Address
SPI_Mems_SendByte ( Temp );
// Read a byte from the MEMS Sensor
Temp = SPI_Mems_SendByte ( DUMMY_BYTE );
// Deselect Mems Sensor: Chip Select high
NSS_TRUE;
return Temp;
}
void SPI_Mems_Write_Reg ( uint8_t regAddr, uint8_t data )
{
// Select Mems Sensor: Chip Select low
NSS_FALSE;
// Send Register Address
SPI_Mems_SendByte ( regAddr );
// Write a byte into the MEMS Sensor Register
SPI_Mems_SendByte ( data );
// Deselect Mems Sensor: Chip Select high
NSS_TRUE;
}