Jump to content

    

hd44780

Свой
  • Content Count

    1231
  • Joined

  • Last visited

Posts posted by hd44780


  1. Поставил себе  ENABLE_SD_DMA_CACHE_MAINTENANCE = 1 изменений не увидел. Да и последние байты у бут-сектора 0x55 и 0xAA, они всегда в порядке были

    бред там в начале буфера.

  2. Про кэши я в курсе, даже не включал их. Попробовал выключить принудительно - получил HardFault.

     

    ST-шники в своих примерах делают 

    	#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
    	            /*
    	               the SCB_InvalidateDCache_by_Addr() requires a 32-Byte aligned address,
    	               adjust the address and the D-Cache size to invalidate accordingly.
    	             */
    	            alignedAddr = (uint32_t)buff & ~0x1F;
    	            SCB_InvalidateDCache_by_Addr((uint32_t*)alignedAddr, count*BLOCKSIZE + ((uint32_t)buff - alignedAddr));
    	#endif

    Это оно по-моему и есть, у меня макроса нет и код этот игнорится

  3. 1 hour ago, Jury093 said:

    может есть смысл поменять msb<>lsb?

    "Последние два байта MBR должны содержать число 0xAA55"

    ну в смысле число 0xAA55, а байты 0x55 и 0xAA - здесь всё нормально, сравнивал даже с секторным дампом этой же карты на компе

  4. Привет всем

    Пытаюсь запустить SD карту на проце STM32F723.

    За основу взял кубовые примеры (мутный он, этот SDIO :D). Там ещё есть SDRAM, SSD1963, QSPI, USB HS - всё пашет без хала. Т.е. на хале сейчас только SDIO.

    Инит карты проходит с полпинка без проблем - тип карты, размер сектора, кол-во секторов, всё проходит идеально с полпинка.

    Пытаюсь читать сектор, ошибок не даёт, но читается какой-то мусор (всегда вроде одинаковый), fatFS естественно падает на взлёте (чего тут ещё ожидать-то). Если надо, могу выложить содержимое  0 сектора настоящего (с компа) и то, что сие SDIO прочитало.

    Но сигнатура 0x55AAв конце нормальная. Такое ощущение, что оно как-то не так или не туда читает.

    Читаю через DMA. Пытался читать polling-функциями - столкнулся с ошибками каких-то переполнений, то там, то сям. На ST-шных форумах нашёл, что, мол, поллинг часто не успевает, используйте DMA. Конкретно у меня Transcend 10 класса, 32 гига.

    Ещё советовали понижать частоту SD карты. Поставил 6 MHz, как там сказали - какие-то сектора начали читаться, но какие-то дают мусор.

    Кто-то подобрал к нему ключик?

     

    Спасибо.

    STM32F723-SDIO.zip

  5. Прикольный баг. Я такого не замечал, но виндозным терминалом никогда не пользовался, работал в этом - https://digitalchip.ru/terminal-1-9b-rabotaem-s-com-portom/ и команды всегда вводил ТОЛЬКО большими буквами.

     

    Зато могу поделиться другим багом - у меня 2 модуля, оба работают в режиме FU2. В этом режиме у модуля пониженное энергопотребление с прослушкой эфира. При этом куча ограничений - скорость только 4800 и какие-то задержки при передаче. Плюс ещё и длинные последовательности байт (по моим наблюдениям больше 10) не передаёт. Но мне этого оказалось достаточно.

    Так вот, один из модулей при входе в командный режим (SET:=0) всегда включает скорость уарта 9600, другой то включит 9600, то так и остаётся на 4800. Пришлось сделать в прошивке проца хак - сперва он стучится в модуль по 4800, если тот не ответил - врубает 9600. Только после этого система стабильно заработала.

     

    Процы у меня - один STM32F030, другой - STM32L152.

    И ещё раздражает то, что невозможно переключить радиоканал без запоминания его в EEPROM управляющего STM8. Где-то попадалась статья, чуваки пытались поменять STM8 на какой-то STM32, но там, по-моему, дело ничем внятным не закончилось.

  6. Привет всем.

    Столкнулся с таким моментом - если проц, подключенный к программатору не отвечает (в моём случае был выставлен режим внешнего кварца, которого на плате вообще нет), то не читается даже версия прошивки самого программатора.

    Когда я воктнул его в другую плату, где есть кварц и target отвечает - всё нормально заработало.

    Подскажите - это баг прошивки или супер-мега-фича для вызова у людей холодного пота и мыслей про сдохший программатор? Тыкался в CvAVR.

     

    Спасибо.

  7. Спасибо, гляну.

    Я от SDRAM немного отвлёкся, запустил QSPI память w25n01gv, вроде пашет, но частоту выше 16.5 МГц поднять не могу - обмен виснет на опросе какого-то флага. Вожусь пока.

    Что касается SDRAM, то нашёл, что нога PC2 (сигнал NE0 - nCS) у этого проца двойным дном, по дефолту там сидит АЦП. Добавил в инит пинов SYSCFG->PMCR |= SYSCFG_PMCR_PC2SO;  перед манипуляциями с GPIO регистрами.

    Улучшений пока не заметил.

    MPU пока выключил, на простую запись/чтение не влияет, а обо всём остальном говорить пока рано.

  8. 9 hours ago, __inline__ said:

    SDRAM на фабричной девборде или самодельная? Что там с трассировкой? Сколько слоёв платы?

     

    Очень странно. Запускал SDRAM на C6545 и BF532/533 запускалась с первого раза.  Настройки брал готовые для нужной SDRAM.

    Разводили сами в альтиуме (под Ф439+такой же SDRAM, который с полпинка взлетел тоже также разводили), заказывали в Китае. Дорожки рисовали руками с контролем длины. В принципе могу выложить альтиумные файлы, секретного там ничего нет, по сути макетка для разборок с этим процом.

    Плата 6-слойная (Ф439 - 4 слойная была). Настройки чипа взял из того же 439.

    18 hours ago, sadat said:

    Где-то читал в теме, что кому-то помогло включить "умощнение" внутреннего генератора частоты для работы.
    Но я бы начал с перетягивания кода с рабочего примера, в папке репозитории Куба есть пример для STM32H743I_EVAL.
    Там в main.c еще многое чего включается, что Куб не включил...

    Что такое "умощнение" внутреннего генератора частоты для работы? Приложил схему синхронизации из куба. FMC там виден.

    STM32H743I_EVAL вроде смотрел, пересмотрю ещё раз, может прогавил чего.

    sync.png

  9. Повключал и настроил всё:

    	// Enable I-Cache
    	SCB_EnableICache ( );
    
    	// Enable D-Cache
    	SCB_EnableDCache();
    
        MPU_Region_InitTypeDef MPU_InitStruct;
    	HAL_MPU_Disable();
    
    	/* Configure the MPU attributes as WT for SDRAM */
    //	MPU_Region_InitTypeDef MPU_InitStruct;
    	MPU_InitStruct.Enable = MPU_REGION_ENABLE;
    	MPU_InitStruct.BaseAddress = SDRAM_BASE;
    	MPU_InitStruct.Size = MPU_REGION_SIZE_64MB;
    	MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
    	MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
    	MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
    	MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
    	MPU_InitStruct.Number = MPU_REGION_NUMBER1;
    	MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
    	MPU_InitStruct.SubRegionDisable = 0x00;
    	MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
    
    	HAL_MPU_ConfigRegion ( &MPU_InitStruct );
    
    	// Enable the MPU
    	HAL_MPU_Enable ( MPU_PRIVILEGED_DEFAULT );

    Никакой разницы не заметил. Может я FMC/SDRAM неправильно сконфигурил?

  10. Вот пытаюсь запустить указанную связку (STM32H743 + SDRAM MT48LC32M16A2-75).

    Результат пока хреновый - читается какой-то бред. Не пашет вобщем :(

    Если точнее - весь объём памяти (64 MB) доступен, ни в накие xxxHandler проц не вылетает, но с чтением/записью памяти трудности.

    После заполнения памяти нулями оттуда читаются слова 0x2004. Казалось бы D13 и D2 где-то коротят на Vcc, но не так-то всё просто - простая запись байтов по адресу 0xC0000000 (у меня банк 0) показывает, что 2-й бит всё же сбрасывается. При этом в MemoryBrowser атоллика видно, что при этом меняются какие-то другие байты по другим адресам - хз почему. Ну и подобные баги.

    Все кэши проца выключены, На FMC подаётся 180 МГц, на память - 90. Инициализация FMC+чип:

    Spoiler
    
    /**
      * @brief  FMC SDRAM Mode definition register defines
      */
    #define SDRAM_MODEREG_BURST_LENGTH_1             ((uint16_t)0x0000)
    #define SDRAM_MODEREG_BURST_LENGTH_2             ((uint16_t)0x0001)
    #define SDRAM_MODEREG_BURST_LENGTH_4             ((uint16_t)0x0002)
    #define SDRAM_MODEREG_BURST_LENGTH_8             ((uint16_t)0x0004)
    #define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL      ((uint16_t)0x0000)
    #define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED     ((uint16_t)0x0008)
    #define SDRAM_MODEREG_CAS_LATENCY_2              ((uint16_t)0x0020)
    #define SDRAM_MODEREG_CAS_LATENCY_3              ((uint16_t)0x0030)
    #define SDRAM_MODEREG_OPERATING_MODE_STANDARD    ((uint16_t)0x0000)
    #define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)
    #define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE     ((uint16_t)0x0200)
    
    /**
      * @brief  Programs the SDRAM device.
      * @retval None
      */
    static void BSP_SDRAM_Initialization_sequence( void )
    {
      FMC_SDRAM_CommandTypeDef Command;
    
      Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
      Command.AutoRefreshNumber      = 0;
      Command.ModeRegisterDefinition = 0;
    
      // Запись в регистр FMC_SDCMR
    
      /* Step 1: Configure a clock configuration enable command */
      Command.CommandMode            = FMC_SDRAM_CMD_CLK_ENABLE;			// 1
    //  HAL_SDRAM_SendCommand ( &hsdram1, &Command, SDRAM_TIMEOUT );
      // Send SDRAM command (timeout unused)
      FMC_SDRAM_SendCommand ( FMC_SDRAM_DEVICE, &Command, 0 );
      // Inserted delay is equal to 1 ms due to systick time base unit (ms)
      HAL_Delay(1);
    
      /* Step 2: Configure a PALL (precharge all) command */
      Command.CommandMode            = FMC_SDRAM_CMD_PALL;					// 2
    //  HAL_SDRAM_SendCommand ( &hsdram1, &Command, SDRAM_TIMEOUT );
      // Send SDRAM command (timeout unused)
      FMC_SDRAM_SendCommand ( FMC_SDRAM_DEVICE, &Command, 0 );
      // Inserted delay is equal to 1 ms due to systick time base unit (ms)
      HAL_Delay(1);
    
      /* Step 3: Configure an Auto Refresh command */
      Command.CommandMode            = FMC_SDRAM_CMD_AUTOREFRESH_MODE;		// 3
    //  HAL_SDRAM_SendCommand ( &hsdram1, &Command, SDRAM_TIMEOUT );
    // Send SDRAM command (timeout unused)
      FMC_SDRAM_SendCommand ( FMC_SDRAM_DEVICE, &Command, 0 );
      // Inserted delay is equal to 1 ms due to systick time base unit (ms)
      HAL_Delay(1);
    
      /* Step 4: Program the external memory mode register */
      // // 0x04 - LOAD_MODE --> SDCMR.MRD (bits 22..9)
      Command.CommandMode            = FMC_SDRAM_CMD_LOAD_MODE;				// 4
    //  Command.ModeRegisterDefinition = 0x0230;		// From F439
      // 0x0200 | 0x0030
      Command.ModeRegisterDefinition = SDRAM_MODEREG_WRITEBURST_MODE_SINGLE | SDRAM_MODEREG_CAS_LATENCY_3;
    //  HAL_SDRAM_SendCommand ( &hsdram1, &Command, SDRAM_TIMEOUT );
      // Send SDRAM command (timeout unused)
      FMC_SDRAM_SendCommand ( FMC_SDRAM_DEVICE, &Command, 0 );
      // Inserted delay is equal to 1 ms due to systick time base unit (ms)
      HAL_Delay(1);
    
      // Step 5: Set the refresh rate counter
    /*
       * Refresh rate = (COUNT+1) * SDRAM clock frequency
       * COUNT = (SDRAM refresh period / Number of rows ) * SDCLK -20  --> FMC_RTR
       * SDRAM refresh period = 64 mc (from SDRAM chip period)
       *  Rows = 8192
       *  COUNT = (64 ms / 8192) - 20 = 0,0078125 ms - 20 = 7.8125mks * 90E6 - 20 = 703,125 - 20 = 683
     */
    //  HAL_SDRAM_ProgramRefreshRate ( &hsdram1, 683 );
      FMC_SDRAM_ProgramRefreshRate ( FMC_SDRAM_DEVICE, 683 );  // -> SDRTR = 683 = 0x2AB << 1 = 0x0556
    
      // Inserted delay is equal to 1 ms due to systick time base unit (ms)
      HAL_Delay(1);
    } // BSP_SDRAM_Initialization_sequence
    
    // FMC initialization function
    static void MX_FMC_Init(void)
    {
      GPIO_InitTypeDef GPIO_InitStruct = {0};
    //  SDRAM_HandleTypeDef hsdram1;
    //  FMC_SDRAM_TimingTypeDef SdramTiming = {0};
    
      // init FMC pins
      /** FMC GPIO Configuration
      PC2_C  ------> FMC_SDNE0  +
      PD0    ------> FMC_D2     +
      PD1    ------> FMC_D3     +
      PD8    ------> FMC_D13    +
      PD9    ------> FMC_D14    +
      PD10   ------> FMC_D15    +
      PD14   ------> FMC_D0     +
      PD15   ------> FMC_D1     +
    
      PE0    ------> FMC_NBL0   +
      PE1    ------> FMC_NBL1   +
      PE7    ------> FMC_D4     +
      PE8    ------> FMC_D5     +
      PE9    ------> FMC_D6     +
      PE10   ------> FMC_D7     +
      PE11   ------> FMC_D8     +
      PE12   ------> FMC_D9     +
      PE13   ------> FMC_D10    +
      PE14   ------> FMC_D11    +
      PE15   ------> FMC_D12    +
    
      PF0    ------> FMC_A0     +
      PF1    ------> FMC_A1     +
      PF2    ------> FMC_A2     +
      PF3    ------> FMC_A3     +
      PF4    ------> FMC_A4     +
      PF5    ------> FMC_A5     +
      PF11   ------> FMC_SDNRAS +
      PF12   ------> FMC_A6     +
      PF13   ------> FMC_A7     +
      PF14   ------> FMC_A8     +
      PF15   ------> FMC_A9     +
    
      PG0    ------> FMC_A10    +
      PG1    ------> FMC_A11    +
      PG2    ------> FMC_A12    +
      PG4    ------> FMC_BA0    +
      PG5    ------> FMC_BA1    +
      PG8    ------> FMC_SDCLK  +
      PG15   ------> FMC_SDNCAS +
    
      PH2    ------> FMC_SDCKE0 +
      PH5    ------> FMC_SDNWE  +
      */
    
      // PC2
      GPIO_InitStruct.Pin = GPIO_PIN_2;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
      HAL_GPIO_Init ( GPIOC, &GPIO_InitStruct );
    
      // PD0, PD1, PD8..PD10, PD14, PD15
      GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
      HAL_GPIO_Init ( GPIOD, &GPIO_InitStruct );
    
      // PE0, PE1, PE7..PE15
      GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |
    		  GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
      HAL_GPIO_Init ( GPIOE, &GPIO_InitStruct );
    
      // PF0..PF5, PF11..PF15
      GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 |
    		  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
      HAL_GPIO_Init ( GPIOF, &GPIO_InitStruct );
    
      // PG0..5, PG8, PG15
      GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_15;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
      HAL_GPIO_Init ( GPIOG, &GPIO_InitStruct );
    
      // PH2, PH5
      GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_5;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
      HAL_GPIO_Init ( GPIOH, &GPIO_InitStruct );
    
      // Enable the FMC/FSMC interface clock
      RCC->AHB3ENR |= RCC_AHB3ENR_FMCEN;
    
    /*
                         15  12 11  8 7  4 3  0
    FMC_SDCR1 = 0x29DA = 0010   1001 1101 1010:
    RPIPE  - bits 14..13 = 01 - 1 cycle delay (+)
    RBURST - bit  12     = 0  - disable (+)
    SDCLK  - bits 11..10 = 10 - 2xCLK (+)
    WP     - bit  9      = 0  - write allowed (+)
    CAS    - bits 8..7   = 11 - 3 cycles (+)
    NB     - bit  6      = 1  - 4 banks (+)
    MWID   - bits 5..4   = 01 - Memory data width (+)
    NR     - bits 3..2   = 10 - Row address 13 bits (+)
    NC     - bits 1..0   = 10 - Column address 10 bits (+)
     */
      FMC_SDRAM_DEVICE -> SDCR[FMC_SDRAM_BANK1] = 0x29DA;
    
      // SDRAM timing
    /*
                                   TRCD  TRP  TWR  TRC TRAS TXSR TMRD
    FMC_SDTR1 = 0x02246472 =  0000 0010 0010 0100 0110 0100 0111 0010
    
    TRCD = 2
    TRP  = 2
    TWR  = 4
    TRC  = 6
    TRAS = 4
    TXSR = 7
    TMRD = 2
    */
      FMC_SDRAM_DEVICE -> SDTR[FMC_SDRAM_BANK1] = 0x02246472;
    
      // Enable FMC Peripheral
      __FMC_ENABLE ( );			// FMC_Bank1_R->BTCR[0] |= FMC_BCR1_FMCEN;
    
      // init SDRAM chip
      BSP_SDRAM_Initialization_sequence ( );
    
      // Очищаем SDRAM
      uint32_t tmp;
      uint32_t size_div4 = SDRAM_SIZE / 4;
      for ( tmp = SDRAM_BASE; tmp < (SDRAM_BASE + size_div4); tmp += 4 )
        *((uint32_t *)tmp) = 0x00000000;
    } // MX_FMC_Init

     

     

    Тактирование (тут чистый кубовый хал):

      // PLL2R - FMC (180 MHz)
      PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC | RCC_PERIPHCLK_USB | RCC_PERIPHCLK_QSPI | RCC_PERIPHCLK_FMC;
      PeriphClkInitStruct.PLL2.PLL2M = 8;
      PeriphClkInitStruct.PLL2.PLL2N = 180;
      PeriphClkInitStruct.PLL2.PLL2P = 2;
      PeriphClkInitStruct.PLL2.PLL2Q = 1;
      PeriphClkInitStruct.PLL2.PLL2R = 1;
      PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_0;
      PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOMEDIUM;
      PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
      // PLL3Q - LTDC (50 MHz)
      PeriphClkInitStruct.PLL3.PLL3M = 8;
      PeriphClkInitStruct.PLL3.PLL3N = 50;
      PeriphClkInitStruct.PLL3.PLL3P = 2;
      PeriphClkInitStruct.PLL3.PLL3Q = 4;
      PeriphClkInitStruct.PLL3.PLL3R = 1;
      PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0;
      PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOWIDE;
      PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
      PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_PLL2;	// PLL2R
      PeriphClkInitStruct.QspiClockSelection = RCC_QSPICLKSOURCE_PLL;
      PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL;
      if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
      {
        Error_Handler();
      }
    

    Кварц 8МГц. (8/8)*180/1=180MHz.

    LTDC нету, просто сконфигурено тактирование. Думать о нём без памяти бессмысленно.

    Такой же чип памяти прекрасно работает на Ф439. Здесь нашёл тему

    , но ТС так и не отписался, заработало у него что-то или нет, а сама тема укатилась хз куда...

     

    Может я чего не понял, как конфигурить это FMC. От Ф4 оно кое-где отличается.

    Спасибо.

  11. 9 hours ago, Donker said:

    То есть ситуация что в alternate functions могут встречаться более одного варианта разводки периферии по ногам микросхемы - нормальна?

     

    Конечно. Такая фича облегчает разводку платы в частности. Когда один и тот же уарт Вы можете взять с двух разных сторон чипа и не тянуть дорожки за три-девять земель в обход кучи компонентов на плате ...

    Или если вам надо включить уарт и ещё что-то, висящее на тех же ногах, например, таймер какой-то. Получается конфликт. Переключением уарта на другие ноги этот конфликт легко устраняется. Ну и тд.

    Для этого оно и придумано наверное.

    А если соединять проводками, то пофиг.

  12. On ‎1‎/‎6‎/‎2019 at 9:01 AM, nanorobot said:

    Не пробовали по FMC подключать LCD с контроллером SSD1963? Интересует как оно будет по сравнению с LTDC.  SDRAM не ставить, корпус процессора в два раза меньше. Заманчиво.  Уже бы сам начал пробовать, ПромЭлектроника до 09.01.19 пьянствует.

     

    PS индикатор: https://www.ecom.cz/open_sheet/sheet_name=D59283

     

    Нет, не делал пока :( . Подключал только SPI-малявку ILI9163 128x128. Работает.

    Да и то SPI этого проца недели 2 раскуривал с помощью коллег с этого форума :biggrin:

  13. Harbinger , повезло вам. Я крышку содрал, припоя там не было вообще, чистая латунь или из чего там они её сделали. Припаял также аккумулятор на 3в.

    Модуль молчит, как и молчал. Греется сам чип, который там стоит. Явно сам этот NEO-6M бракованный.

    Уже 3-й раз нарываюсь на брак. В первый раз модуль с ENC28J60 оказался полным трупом, второй - VS1053 на платке проигрывал половину из того, что должен.

    Ну и хрен с ним.

  14. Заранее извиняюсь, если написал не в тот раздел. Не нашёл более подходящего..

    По сути. Попал в руки GPS модуль GY-NEO6MV2 - https://ru.aliexpress.com/item/GY-NEO6MV2-NEO-6M-GPS-Module-NEO6MV2-With-Flight-Control-EEPROM-MWC-APM2-APM2-5-Large/32785629516.html?spm=a2g0s.9042311.0.0.274233edJaKoCc

    Пытаюсь подключить пока к компу через USB-UART переходник без каких-либо контроллеров и прочего.

    Включил - и ничего. В терминале пусто, ни одного байта, ничего. Запускал под монитором ком-порта - там тоже ничего. Даже светодиод молчит, хотя должен то ли светиться, то ли мигать, неважно. Пробовал частоты 9600 и 38400. Ждал долго (около часа).

    Вычитал, что можно включать и от 3.3в и от 5в, типа там есть стабилизатор. Тоже глухо как в танке.

    Единственное, что он делает - греет атмосферу - на ощупь довольно горячий. На 3.3в чуть менее горячий, на 5в чуть более горячий. На сайтах типа алиэкспресса вычитал в отзывах, что это для них нормально. 

    Ещё сия хреновина любит жрать электроэнергию - мультиметр показал ток типа 195 мА, хотя всякие там ДШ обещают 65-70 мА.

    Обнаружил, что на модуле сдохшая батарейка - вместо 3в там около 40 мВ. Выдрал её оттуда вообще. Без батарейки тоже просто греет атмосферу и жрёт миллиамперы.

     

    Вопрос - ставить ему другую батарейку (типа CR2032) и париться дальше или ему хана, выкинуть его в помойку и идти купить новый? Или что?

     

    Спасибо.

  15. Долго молчал, тестировал.

    Ещё недели полторы назад вынес радиомодуль на отдельную платку проводами (Vcc, GND, Rx, TX, SET) см по 10, на этой платке на питание поставил керамику 10nF, 100nF, 1uF + электролит 100 uF.

    Сигнальные провода идут как есть, без кондёров. На SET можно было тоже 10 нан поставить, а на UART боязно как-то - завалит фронты, хз. Платку с процом не экранировал ничем.

    Второй модуль (который подключен к компу) отнёс подальше от первого - вычитал в статьях про ардуину+HC-12, что модули надо разносить минимум на метр. Про электролит тоже там вычитал (советуют 22uF-1000uF).

    В этих условиях сбоев пока не видел. Прикрутил к процу и датчику спячку - ногу Tx модуля завёл на RX+PA0 будится импульсами уарта модуля. Один байт, конечно, теряет, ну то ладно, так и задумывалось в общем.

    С ногой SET ничего не делал, но она заработала, ответы на AT-команды ловлю исправно.

    Пустое ненужное прерывание собаки выкинул.

    Больше пока ничего не делал, проверяю.

  16. угу, следствие разного рода отладок.

    Перенёс

    RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;

    RCC->APB2ENR |= RCC_APB2ENR_SPI1EN | RCC_APB2ENR_SYSCFGEN;

    в main, ничего не поменялось.

     

    К вопросу о Keil и IAR. С выбором типа проца для проекта разобрался, но они оба почему-то генерят совершенно пустые проекты, в которых нет ни одного файла - ни стартового кода, ни main.c - ничего. main-то у меня свой есть, а вот где взять стартап - пока не понял.

  17. 3 hours ago, Arlleex said:

    Я, все-таки, поставлю на лажовый код для F030. Так как наводят на мысли данные слова:

    Откуда, спрашивается, Вы взяли тогда, что от USART2? Если ни среда, ни startup-файл не должны вообще заикаться о USART2?

    Полагаю, в проекте настроен не тот контроллер, либо startup-файл не для этого контроллера, либо что-то еще подобного плана.

    Взял я это из отладчика, проц задан правильно, стартап файл родом из кокоса.

    error.png

     

    Могу даже полный проект выложить, там ничего секретного нет совершенно.

  18. ага, спасибо.

    Попробую, отпишусь. Кондёры добавлю. Там кое-что быстро не переделать.

    Пока могу сказать, что модуль спаян на макетке проволочками.

     

    Ф103 был подключен к радиомодулю 15 см проводами. Теми же проводами подключал его и к Ф030 - пофигу.