Armadilloフォーラム

CSPI1とPWM02を重複して使用する方法について

sudohayato

2017年5月10日 20時05分

お世話になっております。須藤と申します。

コネクタのピンアサインで悩んでおります。
CSPI1とPWM02を使用する必要があるのですがCON9_25ピンが重複してしまいます。
#CSPI2とPWM04は別装置で使用するため割り当て不可となっております

1.SPIのSSピンを空いているGPIOに割り当てることはできますでしょうか?

2.SPIのSS0を使用せずにCSPI1を使用可能でしょうか?

3.PWMを空いているGPIOに割り当てることはできますでしょうか?

4.その他回避策があれば教えていただきたいです

以上、よろしくお願いいたします。

コメント

y.nakamura

2017年5月10日 21時41分

中村です。

> 1.SPIのSSピンを空いているGPIOに割り当てることはできますでしょうか?

SPIのSSxはGPIOとしてコントロールしていますので、
ドライバソースを書き換えれば他のGPIOに変更できます。
コンフィグレーションのメニューでは無理です。

カーネルは2.6.26でしょうか?それとも3.14でしょうか?
2.6.26ならば、ここ(↓)です。
linux-2.6.26-atXX/arch/arm/mach-mx25/armadillo400_gpio.c

void gpio_spi1_cs_inactive(int cspi_mode, int chipselect)
{
        ...
        switch (chipselect) {
        case 0:
#if defined(CONFIG_ARMADILLO400_CON9_25_CSPI1_SS0) || defined(CONFIG_ARMADILLO410_CON2_69_CSPI1_SS0)
                gpio_set_value(GPIO(1, 16), val);
#endif
                break;
        ...
}
...
void gpio_spi1_cs_inactive(int cspi_mode, int chipselect)
{
        ...
        switch (chipselect) {
        case 0:
#if defined(CONFIG_ARMADILLO400_CON9_25_CSPI1_SS0) || defined(CONFIG_ARMADILLO410_CON2_69_CSPI1_SS0)
                gpio_set_value(GPIO(1, 16), val);
#endif
                break;
        ...
}

あと、PADの設定もこのソースの中にあったはずです。

3.14はよくわかっていませんが、ソースをざっと見たところでは、
このあたり(↓)のような気がします。
linux-3.14-atXX/arc/arm/mach-imx/armadillo4x0_extif.c

static const struct pinctrl_map armadillo4x0_con9_con14_pinctrl_map[] = {
        ...
#if defined(CONFIG_ARMADILLO4X0_SPI1_SS0_CON9_25)
    PIN_MAP_MUX_GROUP_DEFAULT("imx35-cspi.0", "imx25-pinctrl.0",
                  "cspi1_ss0__gpio_1_16", "gpio1"),
    PIN_MAP_CONFIGS_PIN_DEFAULT("imx35-cspi.0", "imx25-pinctrl.0",
                    "MX25_PAD_CSPI1_SS0", pin_cfgs_100kup),
#endif
        ...
};

--
なかむら

sudohayato

2017年5月12日 16時30分

中村さん

須藤です。ご返信ありがとうございます。

カーネルは3.14を使用しております。
まだ試せておりませんが以下の手順で認識あっておりますでしょうか?

1.カーネルソースを修正

2.コンフィグレーションではSPI1のSS0を有効化

3.make

以上、よろしくお願いいたします。

y.nakamura

2017年5月12日 17時36分

中村です。

> まだ試せておりませんが以下の手順で認識あっておりますでしょうか?
> 1.カーネルソースを修正
> 2.コンフィグレーションではSPI1のSS0を有効化

既存のコンフィグレーションをどうするかは、
ソースをどのように修正するかで違ってきます。
独自のコンフィグレーションメニューをKconfigに追加する
というのも1つの方法です。
一時的なテストなどではなく、受託開発の場合には、私は
独自のコンフィグレーションメニューを作るようにしています。

SSに割り当てる別なピンが他の設定と競合することが
ないように注意する必要もあります。

--
なかむら