ru:toh:tp-link:tl-mr3420:deep.mmc.hack

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
ru:toh:tp-link:tl-mr3420:deep.mmc.hack [2014/08/06 11:30]
dioptimizer
ru:toh:tp-link:tl-mr3420:deep.mmc.hack [2014/10/12 10:40] (current)
dioptimizer some cosmetic changes
Line 2: Line 2:
  
 ===== Способ подключения ===== ===== Способ подключения =====
-{{http://​www.mal4x.ru/​download/​file.php?​id=409&​mode=view&​1g1.png?​nolink|Способ подключения}}+{{http://​www.mal4x.ru/​download/​file.php?​id=409&​mode=view&​1g1.png?​nolink|Способ подключения}} ​
 +| {{http://​oi62.tinypic.com/​2qitue0.jpg?​nolink|Способ подключения}} |
  
 //​Схема подключения успешно опробована на шине питания GPIO = 2.6V// //​Схема подключения успешно опробована на шине питания GPIO = 2.6V//
Line 104: Line 105:
  
 <​HTML><​p style="​border:​2px dashed red;">​Второй способ.</​p></​HTML>​ <​HTML><​p style="​border:​2px dashed red;">​Второй способ.</​p></​HTML>​
-=== Вариант ​Int. CS1 ===+=== Вариант ​Internal ​CS1 ===
  
 ^ Internal CS ^ AR724X ^ AR933X ^ ^ Internal CS ^ AR724X ^ AR933X ^
Line 215: Line 216:
  ath79_gpio_function_enable(AR933X_GPIO_FUNC_SPI_CS_EN1);​  ath79_gpio_function_enable(AR933X_GPIO_FUNC_SPI_CS_EN1);​
 </​code>​ </​code>​
 +\\
 +=== Реализация подключение/​извлечение SD-карточки памяти ===
 +{{http://​gumstix.8.x6.nabble.com/​attachment/​640947/​0/​moz-screenshot-4.png?​nolink|Способ подключения (схема)}}
 +
 +//​Используется SD Socket/SD card holder/SD Memory Card Connector с дополнительными соответствующими контактами/​кнопками CD (Card Detect) и WP (Write Protect)//
 +
 +Всего используем два свободных GPIO7->​CS1,​ GPIO18->​CD.
 +Создаем дополнительную кнопку по примеру:​
 +<code diff>
 +diff --git a/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c b/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c
 +index 9323b31..2c51142 100644
 +--- a/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c
 ++++ b/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c
 +@@ -50,7 +50,7 @@ static struct ath79_spi_platform_data ath79_spi_data;​
 + void __init ath79_register_m25p80(struct flash_platform_data *pdata)
 + {
 + ​ ath79_spi_data.bus_num = 0;
 +- ath79_spi_data.num_chipselect = 1;
 ++ ath79_spi_data.num_chipselect = 2;
 + ​ ath79_spi0_cdata.is_flash = true;
 + ​ ath79_spi_info[0].platform_data = pdata;
 + ​ ath79_register_spi(&​ath79_spi_data,​ ath79_spi_info,​ 1);
 +diff --git a/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c b/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c
 +index 5924ac5..892d66f 100644
 +--- a/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c
 ++++ b/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c
 +@@ -9,6 +9,9 @@
 +  */
 + 
 + #​include <​linux/​gpio.h>​
 ++#include <​linux/​mmc/​host.h>​
 ++#include <​linux/​spi/​spi.h>​
 ++#include <​linux/​spi/​mmc_spi.h>​
 + 
 + #​include <​asm/​mach-ath79/​ath79.h>​
 + 
 +@@ -17,21 +20,45 @@
 + #​include "​dev-gpio-buttons.h"​
 + #​include "​dev-leds-gpio.h"​
 + #​include "​dev-m25p80.h"​
 ++#include "​dev-spi.h"​
 + #​include "​dev-usb.h"​
 + #​include "​machtypes.h"​
 + 
 + #​define TL_MR3X20_GPIO_LED_QSS 0
 + #​define TL_MR3X20_GPIO_LED_SYSTEM 1
 ++#define TL_MR3X20_GPIO_CS1_MMC 7
 + #​define TL_MR3X20_GPIO_LED_3G 8
 + 
 + #​define TL_MR3X20_GPIO_BTN_RESET 11
 + #​define TL_MR3X20_GPIO_BTN_QSS 12
 ++#define TL_MR3X20_GPIO_BTN_MMC 18
 + 
 + #​define TL_MR3X20_GPIO_USB_POWER 6
 + 
 + #​define TL_MR3X20_KEYS_POLL_INTERVAL 20 /​* msecs */
 + #​define TL_MR3X20_KEYS_DEBOUNCE_INTERVAL (3 * TL_MR3X20_KEYS_POLL_INTERVAL)
 + 
 ++static struct mmc_spi_platform_data ath79_mmc_pdata = {
 ++ .detect_delay = 250, /* card detection delay in msec */
 ++ .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,​
 ++};
 ++
 ++static struct ath79_spi_controller_data ath79_spi1_cdata = {
 ++ .cs_type = ATH79_SPI_CS_TYPE_GPIO,​
 ++ .cs_line = TL_MR3X20_GPIO_CS1_MMC,​
 ++}; 
 ++
 ++static struct spi_board_info ath79_spi_info[] __initdata = {
 ++ {
 ++ .bus_num = 0,
 ++ .chip_select = 1,
 ++ .max_speed_hz = 25000000,
 ++ .modalias = "​mmc_spi",​
 ++ .platform_data = &​ath79_mmc_pdata,​
 ++ .controller_data = &​ath79_spi1_cdata,​
 ++ }
 ++};
 ++
 + ​static const char *tl_mr3x20_part_probes[] = {
 + ​ "​tp-link",​
 + ​ NULL,​
 +@@ -72,6 +99,13 @@ static struct gpio_keys_button tl_mr3x20_gpio_keys[] __initdata = {
 + ​ .debounce_interval = TL_MR3X20_KEYS_DEBOUNCE_INTERVAL,​
 + ​ .gpio = TL_MR3X20_GPIO_BTN_QSS,​
 + ​ .active_low = 1,
 ++ }, {
 ++ .desc = "​mmc",​
 ++ .type = EV_KEY,
 ++ .code = KEY_MMC_BUTTON,​
 ++ .debounce_interval = TL_MR3X20_KEYS_DEBOUNCE_INTERVAL,​
 ++ .gpio = TL_MR3X20_GPIO_BTN_MMC,​
 ++ .active_low = 1,
 +  }
 + };
 + 
 +@@ -97,6 +131,9 @@ static void __init tl_ap99_setup(void)
 + ​ ath79_register_eth(0);​
 + 
 + ​ ap91_pci_init(ee,​ mac);
 ++
 ++ spi_register_board_info(ath79_spi_info,​
 ++ ARRAY_SIZE(ath79_spi_info));​
 + }
 + 
 + ​static void __init tl_mr3x20_usb_setup(void)
 +</​code>​
 +
 +После компиляции,​ создана дополнительная кнопка GPIO18->​mmc.
 +Далее, необходимо создать [[:​doc:​howto:​hardware.button#​using.atheros.00-button.uci|конфигурацию для кнопки]]:​
 +<code bash>
 +uci add system button
 +uci set system.@button[-1].button=mmc
 +uci set system.@button[-1].action=pressed
 +uci set system.@button[-1].handler='​echo "​spi0.1"​ > /​sys/​bus/​spi/​drivers/​mmc_spi/​bind'​
 +uci add system button
 +uci set system.@button[-1].button=mmc
 +uci set system.@button[-1].action=released
 +uci set system.@button[-1].handler='​echo "​spi0.1"​ > /​sys/​bus/​spi/​drivers/​mmc_spi/​unbind'​
 +uci commit system
 +</​code>​
 +
 +**Примечание:​** До извлечения SD-карты памяти,​ рекомендуется использовать команды **sync** и **unmount** **''<​раздел>''​** - для правильного размонтирования разделов SD-карты памяти,​ т.к. при извлечении карты памяти (после записи на нее), ​ некоторые данные могут остаться в буфере.
 +
 +== Подключение/​извлечение SD карты памяти:​ ==
 +<​HTML>​
 +<pre class="​code">​
 +...
 +[ 1968.380000] mmc_spi spi0.1: SD/MMC host mmc0, no DMA, no WP, no poweroff
 +[ 1968.550000] mmc0: SD Status: Invalid Allocation Unit size.
 +[ 1968.560000] mmc0: host does not support reading read-only switch. assuming write-enable.
 +[ 1968.570000] mmc0: new SD card on SPI
 +[ 1968.570000] mmcblk0: mmc0:0000 00000 1.90 GiB 
 +[ 1968.580000] ​ mmcblk0: p1
 +<​b><​font size=4>[ 1980.340000] mmc0: SPI card removed</​font></​b>​
 +[ 2008.900000] mmc_spi spi0.1: SD/MMC host mmc0, no DMA, no WP, no poweroff
 +[ 2009.070000] mmc0: SD Status: Invalid Allocation Unit size.
 +[ 2009.080000] mmc0: host does not support reading read-only switch. assuming write-enable.
 +[ 2009.090000] mmc0: new SD card on SPI
 +[ 2009.090000] mmcblk0: mmc0:0000 00000 1.90 GiB
 +[ 2009.100000] ​ mmcblk0: p1
 +...
 +</​pre>​
 +</​HTML>​
 +
 \\ \\
 === Модули === === Модули ===
Line 238: Line 384:
 +CONFIG_MMC_SPI=y +CONFIG_MMC_SPI=y
 +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK=y
-+CONFIG_MMC_TIFM_SD=n 
  ​CONFIG_SWCONFIG=y  ​CONFIG_SWCONFIG=y
  ​CONFIG_SWCONFIG_LEDS=y  ​CONFIG_SWCONFIG_LEDS=y
Line 292: Line 437:
 </​HTML>​ </​HTML>​
  
-**Итог:​** Скорость чтения/​записи по шине SPI, прямо зависит от скорости ​CPU.+**Итог:​** Скорость чтения/​записи по шине SPI, прямо зависит от частоты процессора, ​т.к. используется [[wp>​ru:​Bit-banging|Bit-banging]].
  
 == Тест одновременного использования spi0.0 и spi0.1: == == Тест одновременного использования spi0.0 и spi0.1: ==
ru/toh/tp-link/tl-mr3420/deep.mmc.hack.1407317434.txt.bz2 · Last modified: 2014/08/06 11:30 by dioptimizer