SPI<>UART<>USB например FTDI
я в python использовал libftd2xx.so.1.1.12 пробовал и serial, но чип так и не ответил. Но есть сомнение что он впаян ровно.
код тут
http://pastebin.com/2Uct1W76Какой именно ftdi?
Чип нужно прозвонить на КЗ, потом подать питание, на чипе появится на ноге MISO логическая 1.
Вам всем нужен анализатор, тогда быстро все заведете. Я давал ссылку как его самому быстро и дешево собрать или готовый купите.
Я так же выкладывал дамп обмена, чип нужно проинициализировать, потом он начнет генерить меандр на MISO. Ну и т.д.
А чего он отвечать должен, если ты ерунду заливаешь или ты не все показал? Что у тебя с чипом общается?
Изучаем картинки, открывайте их в другом окне, будет больше разрешение.




В общем, вот кусок старой прошивки под STM8S003, код примитивный до ужаса

Будет работать в связке с cp2102,pl2303,ft232r ну или max232

В ней поменял только скорость порта на 576000, не путать с 57600.
#include
#include "stm8s.h"
void Delay (uint32_t nCount);
void spi_reset(void)
{
uint8_t i;
SPI_Cmd(DISABLE);
GPIO_WriteHigh(GPIOC,GPIO_PIN_5);
for (i = 0; i < 8; i++) {
GPIO_WriteReverse(GPIOC,GPIO_PIN_6);
}
SPI_Cmd(ENABLE);
}
#define SPIMAXSZ 450
static uint8_t spibuf[SPIMAXSZ], spibuf_rx[SPIMAXSZ];
static uint16_t spibufsz;
void spi_clear_buf(void) { spibufsz = 0; }
uint8_t *spi_getrxbuf(void) { return spibuf_rx; }
uint8_t *spi_gettxbuf(void) { return spibuf; }
uint16_t spi_getbufsz(void) { return spibufsz; }
int spi_txrx(const uint8_t *wrbuf, uint8_t *rdbuf, uint16_t bufsz)
{
uint16_t i;
for (i = 0; i < bufsz; i++) {
SPI_SendData(wrbuf[i]);
while (SPI_GetFlagStatus(SPI_FLAG_TXE)== RESET);
while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET);
rdbuf[i] = SPI_ReceiveData();
}
return 0;
}
int uart_tx(const uint8_t *rxbuf, uint16_t bufsz)
{
unsigned i;
for (i = 0; i < bufsz; i++) {
UART1_SendData8(rxbuf[i]);
while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
}
return 0;
}
int uart_rx(uint8_t *rxbuf, uint16_t bufsz)
{
unsigned i;
uint16_t t=0;
spibufsz = SPIMAXSZ;
for (i = 0; i < spibufsz; i++) {
while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET)
{
if (t<5) t++;
else {
if (i!=0) spibufsz=i;else spibufsz=0;
return 0;
}
}
t=0;
rxbuf[i] = UART1_ReceiveData8();
}
spibufsz = i;
return 0;
}
void main(void)
{
CLK_DeInit();
/* Configure the Fcpu to DIV1*/
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
/* Configure the HSI prescaler to the optimal value */
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, ENABLE);
CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE);
GPIO_DeInit(GPIOC);
GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_IN_FL_NO_IT);
GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_OUT_PP_LOW_FAST);
UART1_DeInit();
UART1_Init((uint32_t)576000, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
UART1_Cmd(ENABLE);
SPI_DeInit();
SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_8, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_LOW,
SPI_CLOCKPHASE_1EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,(uint8_t)0x07);
SPI_Cmd(DISABLE);
uart_tx("\x88",1);
uint32_t t;
BitStatus pin;
while (1)
{
uart_rx(spi_gettxbuf(),spi_getbufsz());
if(spibufsz>0) {
for(t=0;t<1000;t++) {
pin = GPIO_ReadInputPin(GPIOC, GPIO_PIN_7);
if (pin==0) {break;}
}
spi_reset();
spi_txrx(spi_gettxbuf(), spi_getrxbuf(), spi_getbufsz());
uart_tx("\x88",1);
uart_tx(spi_getrxbuf(),spi_getbufsz());
}
}
}
void Delay(uint32_t nCount)
{
while (nCount != 0)
{
nCount--;
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while (1)
{
}
}
#endif