ͥ٥ PCMCIA 󥿡եɥ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
John G Dorsey <john+@cs.cmu.edu>
ǽ 2000 ǯ 6  30 


աΥ󥿡եϤޤƤޤ
ȡhttp://www.cs.cmu.edu/~wearable/software/pcmcia-arm.html


Ϥ

StrongARM ѤνС PCMCIA Card Service Ǥϡ桼ɤ
ץȤȤˤäơƼ SA-1100 ܡɾñ
åȥɥ饤Фư褦߷פƤޤ2.3 ͥ륷꡼ؤ
ѹȼƤ꤬ͥɳΥ֥ɥ饤ФؤȰܤޤ
(linux/drivers/pcmcia/sa1100* 򻲾ȤΤ)ΥɥȤϡ
ɥ饤Ф sa1100 åȥɥ饤Х⥸塼ȤΤ٥륤󥿡
եˤĤΤǤ

ߤΤȤܡɸͭΥɤ󶡤ʤФʤʤϻĤΥڥ졼
󤬤ޤΥ٥Ǥϡܡ߷פΰ㤤ˤۤʤ
Ȥ¿ǽ׵ᤵƤޤȤмΤ褦ʤΤޤޤޤ

  - ΤΥɸХ饤
  - 줿ɤͭŰ٥ο
  - ѥꥻåȿΥ

Ƥ߷פ̤ƱǤȻפ뵡ǽˤĤƤϡѥåȥɥ饤
ȤǼ¹ԤޤȤмˤ褦ʥڥ졼󤬴ޤޤޤ

  - åȿ˴Ťꥢ֤
  - ɤ߽񤭡Х swizzling, ...

ߤμǤϡܡθͭ٥륪ڥ졼ΥåȤ¹Ի
ꤹ뤳ȤǤޤ줾θͭʥܡѤˡι¤Τͤ
ɬפޤ

  struct pcmcia_low_level {
    int (*init)(struct pcmcia_init *);
    int (*shutdown)(void);
    int (*socket_state)(struct pcmcia_state_array *);
    int (*get_irq_info)(struct pcmcia_irq_info *);
    int (*configure_socket)(const struct pcmcia_configure *);
  };

ƴؿˤĤƤϲǾܺ٤ޤmachine_is_*() ƥȤѤơ
ݥ `pcmcia_low_level' ܡѥơ֥ΰ֤ؤ褦ˤʤ
Фʤޤ


0. init(struct pcmcia_init *init)

Υڥ졼ǤϤ٤ȤĤޤ

  - ƤΥܡɸͭν򤪤ʤ
  - Ϳ줿ϥɥȡɸФХåƥ꡼ŰФʤɤƤ
    ȤϢդ
  - ɥǥѤɬפƤΥåФ򥻥åȥåפ

Υڥ졼Ϥϡι¤Τˤ󶡤ޤ

  struct pcmcia_init {
    void (*handler)(int irq, void *dev, struct pt_regs *regs);
    struct pcmcia_maps *maps;
  };

Ǥϡ`handler' ϥåȥɥ饤Фˤ󶡤ޤǥեȤ
ޥåԥ󥰤ŬڤǤʤʤС`maps' ɬפޤΥ
졼ĤͤΤɤ餫֤ɬפޤ

  - ѲǽֹդåȤκֹ桢ץ饹
  - ˤ륨顼򼨤

Ԥξ硢줬ֻѲǽʥåȤοפƱǤ _ʤ_ ȤȤ
դƤäˡʤ߷פ SA-1100 å "zero" ǤϤʤ
å "one" ѤƤ硢åȥɥ饤ФФ "2" 
ʤФʤޤ


1. shutdown(void)

Υڥ졼ϰ餺åȥɥ饤ФΥ꡼󥢥å
ƤӽФޤƤ줿ǡ¤Τݤ IRQ ʤɤΡå
ȥ˴Ϣդ줿ǡơΥ롼ǲɬפ
ޤ

Υڥ졼ͤϥåޤ


2. socket_state(struct pcmcia_state_array *state_array)

Υڥ졼ϡ init() ƽФˤꥻåȥåפ줿
ϥɥ餫ƤӽФޤʤ顢ڥǥ󥰤ˤʤäƤ
ʤȤˤΥڥ졼󤬸ƤӽФ줿ˤ⡢ŬڤѤ
ȯʤ褦ˤʤФʤޤ(ߤΤȤåȥɥ饤Ф
֤뤿ˡΥڥ졼󤬤⤦ٸƤФΤǤ)

Υڥ졼Ϥϡηޤ๽¤Τˤ갷
ޤ

  struct pcmcia_state {
    unsigned detect: 1,
              ready: 1,
               bvd1: 1,
               bvd2: 1,
             wrprot: 1,
              vs_3v: 1,
              vs_Xv: 1;
  };

ڥ졼󤫤äȤϡɥŪ뤽줾Υå
˹¤ pcmcia_state åȤƤʤФʤޤ󡣻Ѳǽ
åȤбʤƤ (¤ pcmcia_state_saaray  `size'
ޤ) ϡǤΥӥåȤ򥼥ˤޤ (å zero Ȥʤˤ
element [0] ޤߤޤ)

Ƽο椬ɤΤ褦 SA-1100 ã뤫˴طʤ¤ pcmcia_state
ΥӥåȤϾ˲ΥޥƥåäƤޤ

  detect - ɤƤ 1, Ǥʤ 0
  ready  - ɥǥ椬ȤƤ 1, Ǥʤ 0
  bvd1   - Хåƥ꡼Ű 1 
  bvd2   - Хåƥ꡼Ű 2 
  wrprot - ɤ饤ȥץƥȤƤ 1, Ǥʤ 0
  vs_3v  - ɤ 3.3V ǰ٤ʤ 1, Ǥʤ 0
  vs_Xv  - ɤ X.XV ǰ٤ʤ 1, Ǥʤ 0

BVD ˴ؤջࡧ ʤΥܡɤǤɤΥ饤ץå
ľܸ֤ˤʤϡñ֤ͤƤBVD 
ɸŪʲˡϼΤȤǤ

  BVD1  BVD2

   0     x    Хåƥ꡼Ǥ
   1     0    Хåƥ꡼ٹ
   1     1    Хåƥ꡼ OK

Űǥե饰 (vs_3v, vs_Xv) ˤĤƤǤΥӥåȤϡǽʤ
ŰǥԥΥץ󥰤˴ŤƥåȤ٤ǤVS  ("Ű"
å) ɸŪʲˡϼΤȤǤ

  VS1   VS2

   0     0    X.XV, Ǥʤ 3.3V, Ǥʤ none
   0     1    3.3V, Ǥʤ none
   1     0    X.XV, Ǥʤ none
   1     1    5V, Ǥʤ none

BVD  VS δ˴ؤ¿ξϡDon Anderson ˤ "PCMCIA
System Architecture" Ǥ޾Ϥˤޤ

Υڥ졼ǤϡåȥȥǼºݤ IRQ ڥǥ
ˤʤäƤˤ 1 IRQ ڥǥ󥰤ˤʤäƤʤ (
ΥΥ顼郎¸ߤƤʤ) ˤ 0 
顼ξˤ -1 ֤褦ˤƤ


3. get_irq_info(struct pcmcia_irq_info *info)

Υڥ졼ϡꤵ줿åȤФͭ IRQ Ƥ
ޤηΰϤޤ

  struct pcmcia_irq_info {
    unsigned int sock;
    unsigned int irq ;
  };

`sock' եɤˤ䤤碌оݤΥåȥǥåޤޤޤ
`irq' եɤˤϥǥХΥɥǥб IRQ ֹ椬
ޤޤޤ

Υڥ졼ϡˤ 0 򡢥顼ξˤ -1 ֤褦
Ƥ


4. configure_socket(const struct pcmcia_configure *configure)

Υڥ졼ˤꡢƽФ¦ϥåȤؤŸ롢ꥻåȤȯԡ
ƼϤΥ֥͡򤪤ʤޤηΰϤޤ

  struct pcmcia_configure {
    unsigned sock: 8,
              vcc: 8,
              vpp: 8,
           output: 1,
          speaker: 1,
            reset: 1;
  };

`sock' եɤˤꤵ륽åȤΥǥåޤޤޤ`vcc'
 'vpp' եɤˤϤ줾졢0.1V ñ̤ǡVcc  Vpp ŬѤ٤
ŰޤޤƤޤ(vpp==120 ϥץߥŰŬѤ٤
뤳Ȥ̣ƤΤդƤ)

Ĥνϥ֥͡ `output'  `speaker' Ϥ줾졢ɥǡ
֥͡ȥɥԡ֥̣͡ޤ`reset' ӥåȤå
ƤϡɥꥻåȤȤ٤Ǥ뤳Ȥ򼨤ޤ

Υڥ졼ϡʤ 0 򡢥顼ʤ -1 ֤褦ˤޤ


ܡɸͭս

ξϡͥ˥ݡȤɲäȤ˥ե󥹤Ȥƻ
ǽΤƼ SA-11x0 ܡɤ߷פ˴ؤΤǤ


ͥ Itsy/Cue (http://www.cs.cmu.edu/~wearable/itsy/)

  Itsy åץ쥯 3 (CS3) 󥿡ե
  ("ITSY MEMORY/PCMCIA ADD-ON BOARD with BATTERY and CHARGER CIRCUITRY,"
  Tim Manns, Richard Martin ʤɤ 1999/5/20 դ)

  ɽФ:
    ABVD2    (SS)D0          A åȡХåƥ꡼Ű
    ABVD1    (SS)D1
    AVSS2    (SS)D2          A åȡŰ
    AVSS1    (SS)D3
    GND      (SS)D4
    GND      (SS)D5
    GND      (SS)D6
    GND      (SS)D7

    BBVD2    (SS)D8          B åȡХåƥ꡼Ű
    BBVD1    (SS)D9
    BVSS2    (SS)D10         B åȡŰ
    BVSS1    (SS)D11
    GND      (SS)D12
    GND      (SS)D13
    GND      (SS)D14
    GND      (SS)D15
  
  :
    (SS)D0   A_VPP_VCC       LTC1472 VPPEN1
    (SS)D1   A_VPP_PGM       LTC1472 VPPEN0
    (SS)D2   A_VCC_3         LTC1472 VCCEN0
    (SS)D3   A_VCC_5         LTC1472 VCCEN1
    (SS)D4   RESET (A å)
    (SS)D5   GND
    (SS)D6   GND
    (SS)D7   GND
 
    (SS)D8   B_VPP_VCC       LTC1472 VPPEN1
    (SS)D9   B_VPP_PGM       LTC1472 VPPEN0
    (SS)D10  B_VCC_3         LTC1472 VCCEN0
    (SS)D11  B_VCC_5         LTC1472 VCCEN1
    (SS)D12  RESET (B å)
    (SS)D13  GND
    (SS)D14  GND
    (SS)D15  GND

  GPIO ԥγƤϲΤȤǤ(ϩޤ)

    GPIO 10                  å 0 ɸ
    GPIO 11                  å 1 ɸ
    GPIO 12                  å 0 ǥ
    GPIO 13                  å 1 ǥ



Intel SA-1100 Multimedia Board (http://developer.intel.com/design/strong/)

  CPLD 쥸
  SA-1100 Multimedia Development Board with Companion SA-1101 Development
    Board User's Guide, p.4-42

   SA-1100/1101 ȯѥåϡɤξѲΤ˰Ĥ
  GPIO ԥ (24) ѤǤ뤫ȽǤΤ PCMCIA
  ơ쥸Ĵ٤뤳Ȥ򥽥եȥ׵ᤷƤޤ

  ɽФ: (PCMCIA Ÿǥ쥸 - 0x19400000)
    S0VS1           0        å 0 Ű
    S0VS2           1
    S0BVD1          2        å 0 Хåƥ꡼Ű
    S0BVD2          3
    S1VS1           4        å 1 Ű
    S1VS2           5
    S1BVD1          6        å 1 Хåƥ꡼Ű
    S1BVD2          7

  ɽФ: (PCMCIA Ÿ쥸 - 0x19400002)
    S0VPP0          0        å 0 Vpp
    S0VPP1          1
    S0VCC0          2        å 0 Vcc
    S0VCC1          3
    S1VPP0          4        å 1 Vpp
    S1VPP1          5
    S1VCC0          6        å 1 Vcc
    S1VCC1          7

  ɽФ: (PCMCIA ơ쥸 - 0x19400004)
    S0CD1           0        å 0 ɸ 1
    S0RDY           1        å 0 ǥ
    S0STSCHG        2        å 0 Ѳ
    S0Reset         3        å 0 ꥻå (RW)
    S1CD1           4        å 1 ɸ 1
    S1RDY           5        å 1 ǥ
    S1STSCHG        6        å 1 Ѳ
    S1Reset         7        å 1 ꥻå (RW)



Intel SA-1100 Evaluation Platform (http://developer.intel.com/design/strong/)

    Brutus I/O ԥ󤪤ӥåץ쥯ȥ쥸
    Ivo Clarysse ˤ pcmcia-brutus.c
    (ξθʥե󥹤ʲ)

   SA-1100 ȯܡɤϡItsy  SA-1100/1101 Multimedia ѥå
  ¿ GPIO ԥѤޤԥγƤϼΤȤǤ

    GPIO 2                   å 0 Хåƥ꡼Ű 1
    GPIO 3                   å 0 ǥ
    GPIO 4                   å 0 ɸ
    GPIO 5                   å 1 Хåƥ꡼Ű 1
    GPIO 6                   å 1 ǥ
    GPIO 7                   å 1 ɸ

Itsy Ʊ͡Brutus ϡŰǤꥻåȤʤɤ¾οѤŪ
Х 3 Υåץ쥯ȥ쥸Ѥޤ

  ɽФ:
    P0_VS1          8        å 0 Ű
    P0_VS2          9
    P0_STSCHG      10        å 0 Ѳ
    P1_VS1         12        å 1 Ű
    P1_VS2         13
    P1_STSCHG      14        å 1 Ѳ

  ɽФ:
    P0_            16        å 0 MAX1600EAI 饤
    P0_            17        å 0 MAX1600EAI 饤
    P0_            18        å 0 MAX1600EAI 饤
    P0_            19        å 0 MAX1600EAI 饤
    P0_            20        å 0 12V
    P0_            21        å 0 Vpp to Vcc (׳ǧ)
    P0_            22        å 0 ե󥢥ȥɥ饤Фȥȥ󥷡ФΥ֥͡
    P0_SW_RST      23        å 0 ꥻå
    P1_            24        å 1 MAX1600EAI 饤
    P1_            25        å 1 MAX1600EAI 饤
    P1_            26        å 1 MAX1600EAI 饤
    P1_            27        å 1 MAX1600EAI 饤
    P1_            28        å 1 12V
    P1_            29        å 1 Vpp to Vcc (׳ǧ)
    P1_            30        å 1 ե󥢥ȥɥ饤Фȥȥ󥷡ФΥ֥͡
    P1_SW_RST      31        å 1 ꥻå

ƥåȤˤơ"MAX1600EAI" ȥ٥դƤӥåȤˤϡ
(餯) Vcc 3.3V ʤ 0101 Vcc 5V ʤ 1001 
Ǥɬפޤ



Intel SA-1110 Development Platform (http://developer.intel.com/design/strong/)

  GPIO ԥӥܡ쥸
  SA-1110 Microprocessor Development Board User's Guide, p.4-7, 4-10

  Assabet ܡɤϡSA-1110 Υå 1 ˼դƤ륳ѥ
  եåĤޤǤޤ󡣥ɸСǥBVD  GPIO 
  ͳŸӥꥻåȤ쥸֤ƤޤCF Хϻ
  ˥֥͡뤷Ƥɬפ뤳ȤդƤ

    GPIO 21                  å 1 ѥȥեå
    GPIO 22                  å 1 ɸ (CD1 NOR CD2)
    GPIO 24                  å 1 Хåƥ꡼Ű 2
    GPIO 25                  å 1 Хåƥ꡼Ű 1

  ߤΤ: (ܡ쥸 - 0x12000000)
    CF_PWR          0        CF ХŸ (3.3V)
    CF_RST          1        CF ꥻå
    CF_Bus_On       7        CF Х֥͡

------------------------------------------------------------
Ρ JF ץ < http://www.linux.or.jp/JF/ >
   2004/02/10
ԡ    ɧ <takahiko(a)hakubi.co.jp>
