Differences

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

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: ==

Back to top

ru/toh/tp-link/tl-mr3420/deep.mmc.hack.1407317434.txt.bz2 · Last modified: 2014/08/06 11:30 by dioptimizer