Перейти к содержанию
    

gosha_kap

Участник
  • Постов

    10
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Да, спасибо...заработала....хреновина -)
  2. Ну хорошо, просто я и так и так пробовал, сейчас поиенял, ситуация не изменилась....что еще может быть
  3. инициализация SPI на PIC

    В общем с пиками дел мало имел, хочу инициализировать SPI на нем вот то что получилось list p=16F877A #include <p16F877A.inc> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cycle_1 equ 0x20 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;Prepare;;;;;;;;;;;;;;;;;;;; clrf PORTA clrf PORTC clrf PORTD bcf STATUS,RP0 movlw 0x00 movwf INTCON movlw b'11010011' movwf PORTC movlw b'00000100' movwf PORTD movlw b'11111110' movwf PORTA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;Initial;;;;;;;;;;;;;;;;;;; SPI_Initial bsf STATUS,RP0 bsf TRISC,3 bsf TRISC,5 bcf TRISC,2 ;;cs low bcf SSPSTAT,SMP bcf SSPSTAT,CKE bcf STATUS,RP0 ;; 0 bcf SSPCON,0 ;ведущий режим SPI, bcf SSPCON,1 ;тактовый сигнал bcf SSPCON,2 ; =Focs/4 bcf SSPCON,3 bsf SSPCON,4 bsf SSPCON,5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;Power cycle;;;;;;;;;;;;;; bsf STATUS,RP0 bsf TRISC,2 ;;cs high bcf STATUS,RP0 loop movlw 0xFF movwf SSPBUF goto loop end В общем я ожидаю получить на осцилографе импульсы с выхода SCK и SDO ...... А вокруг тишина....
  4. F2013 +SPI +SD

    В общем дело оказалось в инициализации портов. В примере от Ti.com указано MMC_CD_PxDIR &= ~MMC_CD; Заменил на MMC_CD_PxOUT |= MMC_CD; MMC_CD_PxDIR |= MMC_CD; В моем случае P1DIR |= 0x03; // Card Detect P1DIR |= 0x03; ответ response==0x01 я получил. Иду дальше....
  5. F2013 +SPI +SD

    Теперь после отправки команды CMD0(0x40) получаю 0x00......хм
  6. F2013 +SPI +SD

    т.е надо запитать SD карту не от кита, а от какого нибудь дополнительного источника со стабилизатором,верно? попробую седня
  7. F2013 +SPI +SD

    Просто есть пока эта плата, и хотелось бы пока попрактиковаться с SD протоколом Да, собственно приходит ответ , но response==0xFF, где то наверное порядок напутал Собственно о чем это может говорить ответ 0xFF 1) что то не так подключил?? \вроде все проверил, еще включил pullup на CS , а может это SD вые...я? 2) может нарушил порядок инициализации?? Брал с исходника ТИ , так что вряд ли это программный глюк....
  8. Хорошо, спасибо , завтра резисторы в добавок поставлю и начну "программировать" -))
  9. Хочу подключить MSP430F2013 к SD карте по SPI На ТИ.ком нашел схему подключения другой микросхемы MSP430F16x( на рисунке 1) Сама микросхема F2013 входит в комплект ez430 с выводами под этот МК ( на рисунке 2) Собственно вопрос, как подключить SD к 2013 в данном случае с платы ez430 ????? SD питание 3 V, задаю программно на плате// Собственно подключаю к выводам Px SD карту следующим образом..... // MSP430F2013 SD Card // ----------------- ----------------- // | | | | // | | | | // | Vcc |-- ---|Pin4/Vcc // | | | | // | | | | // | P1.2 |<----|Pin6/CD/Vss2 // | P1.1 |---->|Pin1/CS // | | | // | P1.7/SDI |---->|Pin7/DO // | P1.6/SDO |<----|Pin2/DI // | P1.5/SCLK |---->|Pin5/CLK // | | | // | Vss|------|Pin3/GND/Vss1
  10. F2013 +SPI +SD

    Добрый день... приобрел комплект EZ430-F2013 решил подключить SD карту к выводам на плате , сделал это таким образом // MSP430F2013 SD Card // ----------------- ----------------- // | | | | // | | | | // | Vcc |-- ---|Pin4/Vcc // | | | | // | | | | // | P1.2 |<----|Pin6/CD/Vss2 // | P1.1 |---->|Pin1/CS // | | | // | P1.7/SDI |---->|Pin7/DO // | P1.6/SDO |<----|Pin2/DI // | P1.5/SCLK |---->|Pin5/CLK // | | | // | Vss|------|Pin3/GND/Vss1 Сразу же вопрос можно ли так напрямую подключать? Далее, пользуясь исходником на сайте TI выписал часть программы #include "msp430.h" #define halSPITXDONE (1) #define DUMMY_CHAR 0xFF #define CS_LOW() P1OUT &= ~0x02; // Card Select #define CS_HIGH() while(!halSPITXDONE); P1OUT |= 0x02; // Card Deselect char mmcInit(void); void halSPISetup (void); unsigned char spiSendByte(const unsigned char data); char mmcGoIdle(); void mmcSendCmd (const char cmd, unsigned long data, const char crc); char mmcGetResponse(void); unsigned char spiSendFrame(unsigned char* pBuffer, unsigned int size); unsigned int timeout = 0; unsigned char status = 0; unsigned int sic; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Остановка сторожевого таймера for(sic=0; sic<150; sic++) status = mmcInit(); if(status==0x01) {P1DIR |= 0x01;P1OUT |= 0x01;} //Тут как я понимаю, если все правильно должна загореться лампочка } char mmcInit(void) { int i; P1OUT |= 0x60; // SDO и SLTK P1DIR |= 0x60; // CS P1OUT |= 0x02; P1DIR |= 0x02; // Card Detect P1DIR &= ~0x04; // Init SPI Module halSPISetup(); // Enable secondary function P1SEL |= 0xE0; //initialization sequence on PowerUp CS_HIGH(); for(i=0;i<=9;i++) spiSendByte(DUMMY_CHAR); return (mmcGoIdle()); } void halSPISetup(void) { USICTL0 = USIPE7+USIPE6+USIPE5+USIMST+USIOE; // Port, SPI master USICKCTL = USISSEL_2 + USICKPL; // SCLK = SMCLK USICTL0 &= ~USISWRST; // USI released for operation USISRL = 0x00; // Ensure SDO low instead of high, USICNT = 1; } unsigned char spiSendByte(const unsigned char data) { while ((USIIFG & USICTL1)==0); // wait while not ready for TX USISRL = data; USICNT = 8; // write return (USISRL); } char mmcGoIdle() { CS_LOW(); //Send Command 0 to put MMC in SPI mode mmcSendCmd(0x40,0,0x95); //Now wait for READY RESPONSE if(mmcGetResponse()==0x01) return(1); else return(0); } void mmcSendCmd (const char cmd, unsigned long data, const char crc) { unsigned char frame[6]; char temp; int i; frame[0]=(cmd|0x40); for(i=3;i>=0;i--){ temp=(char)(data>>(8*i)); frame[4-i]=(temp); } frame[5]=(crc); spiSendFrame(frame,6); } char mmcGetResponse(void) { //Response comes 1-8bytes after command //the first bit will be a 0 //followed by an error code //data will be 0xff until response int i=0; char response; while(i<=64) { response=spiSendByte(DUMMY_CHAR); if(response==0x00)break; if(response==0x01)break; i++; } return response; } unsigned char spiSendFrame(unsigned char* pBuffer, unsigned int size) { unsigned long i = 0; // clock the actual data transfer and receive the bytes; spi_read automatically finds the Data Block for (i = 0; i < size; i++){ while ((USIIFG & USICTL1) ==0); // wait while not ready for TX USISRL = pBuffer[i]; USICNT = 8; // write pBuffer[i] =USISRL; } return(0); } как я понимаю на этом этапе после получения response==0x01 должна загорется лампочка на плате Так как опыта с МК нет, думаю что тут какая то принципиальная ошибка... Собственно, наверное, кто то уже делал что либо подобное .... Скажите в каком направлении двигаться и искать ошибку...............
×
×
  • Создать...