도와주세요!!
글 수 15,339
2007.07.18 19:24:25 (*.138.143.118)
7665
안녕하세요...
소스상의 어드레스가 0x000001 = A0 , 0x000002 = A1 ,0x000004 = A2 이런식으로 정확히 매핑됩니다.
현재 제공되는 커널에서는 A0~ A23까지 24개의 어드레스가 가능합니다. 만약 A24 와 A25를 사용하고자 한다면 아래와 같이 커널을 수정해 주셔야 합니다.
현재 제공된 커널에서는 CS의 가상주소를 0xfx000000 으로 16MByte씩 임의적으로 잡아 놓았습니다.
커널에서 이 주소를 수정하시면 A24, A25도 사용 가능합니다.
static struct map_desc ez_ep9312_io_desc[] __initdata = {
{ EP93XX_AHB_BASE, io_v2p(EP93XX_AHB_BASE), SZ_1M, MT_DEVICE },
{ EP93XX_APB_BASE, io_v2p(EP93XX_APB_BASE), SZ_8M, MT_DEVICE },
{ 0xf1000000, EP9312_CS1_PHYS +0x000000, 0x00100000, MT_DEVICE }, // nCS1 NAND-Flash
{ 0xf2000000, EP9312_CS2_PHYS , 0x01000000, MT_DEVICE }, // nCS2 16MByte Area
{ 0xf3000000, EP9312_CS3_PHYS , 0x01000000, MT_DEVICE }, // nCS3 16MByte Area
{ 0xf4000000, EP9312_CS6_PHYS , 0x01000000, MT_DEVICE }, // nCS4 16MByte Area
{ 0xf5000000, EP9312_CS7_PHYS , 0x01000000, MT_DEVICE }, // nCS5 16MByte Area
};
이 설정을 A24 어드레스를 사용가능하게 할려면
static struct map_desc ez_ep9312_io_desc[] __initdata = {
{ EP93XX_AHB_BASE, io_v2p(EP93XX_AHB_BASE), SZ_1M, MT_DEVICE },
{ EP93XX_APB_BASE, io_v2p(EP93XX_APB_BASE), SZ_8M, MT_DEVICE },
{ 0xf1000000, EP9312_CS1_PHYS +0x000000, 0x00100000, MT_DEVICE }, // nCS1 NAND-Flash
{ 0xf3000000, EP9312_CS2_PHYS , 0x02000000, MT_DEVICE }, // nCS2 16MByte Area
{ 0xf5000000, EP9312_CS3_PHYS , 0x02000000, MT_DEVICE }, // nCS3 16MByte Area
{ 0xf7000000, EP9312_CS6_PHYS , 0x02000000, MT_DEVICE }, // nCS4 16MByte Area
{ 0xf9000000, EP9312_CS7_PHYS , 0x02000000, MT_DEVICE }, // nCS5 16MByte Area
};
이렇게 수정하시고 하시면 A24와 조합하셨어 사용하실 수 있습니다.
이 가상 주소는 사용자 임의의로 설정하는 것입니다. 하지만 설정한 가상주소가 커널에서 사용하지 않는 주소를 써야 합니다. 만약 0xf900000를 설정하였는데 다른 디바이스에서 이미 이 주소를 할당하고 있다면
충돌이 발생하겠죠.... 따라서 이럴 경우는 아래 참고와 같이 ioremap 함수를 사용하기를 권장합니다.
---- 참고)
현재의 커널들은 위와 같이 가상 주소를 사용하지 않고 ioremap이라는 함수를 통하여 가상주소를 할당 받 사용합니다. 위와 같이 가상 주소를 직접 사용하게 되면 커널에서 사용하는 주소와 간혹 충돌이 발생할 수도 있기때문입니다.
만약 ioremap 함수를 사용할 경우
static struct map_desc ez_ep9312_io_desc[] __initdata = {
{ EP93XX_AHB_BASE, io_v2p(EP93XX_AHB_BASE), SZ_1M, MT_DEVICE },
{ EP93XX_APB_BASE, io_v2p(EP93XX_APB_BASE), SZ_8M, MT_DEVICE },
};
이렇게 커널을 수정하시고 디바이스 드라이버에서 주소 설정시 ioremap 함수를 통하여 가상 주소를 할당 받으시면 됩니다.
그럼 수고하세요.
>제가 설명이 좀 부족했나 보군요..
>DIO 예제의 소스를 보면 CS로 nCS3를 사용합니다. 이 nCS3가 0xf3000000 이고 어드레스A24를
>조합할경우 0xf3000000 + 0x1000000으로 0xf4000000이 되죠. 그런데 이 값은 nCS6 의 값이 됩니다.
>그러므로 A24이상은 사용할수 없게 되더라구요.. 이상의 내용을 가지고 전화상으로 문의 들였더니
>전체 A0 부터 A25 까지 총 26개의 어드레스핀 중에 24개의 어드레스핀만 사용가능하다는 답을
>들었습니다.
>제 질문은 그럼 총 26개의 어드레스핀 중에서 24개의 어드레스핀 을 사용할 수 있다고 하셨는데
>사용할수 있는 어드레스핀이 A0 부터 A25중에 어떤 것인지를 물어보는것 입니다.
>A0 ~ A23 인지 아님 중간에 건너뛰거나 하지는 않는지
>그리고 소스상의 어드레스가 0x000001 = A0 , 0x000002 = A1 ,0x000004 = A2 이런식으로 정확히 매핑이 되는지를 물어보는것입니다. 저도 당연히 A0 ~ A23까지 사용할수 있고 0x000001 = A0 이런식으로 매핑될거라 생각됩니다만 혹시나 해서 질문 드리는 겁니다.
>
>
>>안녕하세요.
>>
>>어드레스는 A0 ~ A25까지 사용가능합니다.
>>
>>>이예제를 응용하여 사용할때 유선상으로 어드레스 핀으로 24핀을 사용할 수 있다는 답은 들었는데
>>>그게 A0 부터 A25까지중에 어떤핀을 사용할수 있는지 질문드립니다.
>>
>>==> 이게 어떤 의미인가요??? 어드레스 핀을 24으로 사용하는데 A0 부터 A25까지중에 어떤핀을 사용할
>> 수 있는지라는 질문이 이해가 가지 않습니다.
>>
>> 어드레스 핀을 상위 비트로 사용하는 이유가 따로 있나요..
>> 이럴 경우 칩셀렉터 신호와 조합할 경우 계산이 복잡해 질 수도 있습니다.
>> 만약 어드레스를 A24을 사용한다면... nCSx + A24 ( 0x1000000) 을 하셔야 합니다.
>>
>>
>>>메뉴얼에 나와있는 DIO예제에서는 A8, A9, A10을 연결하지만 실제로는 A8번만 사용합니다.
>>
>>==> 이렇게 74HC138을 사용한 이유는 칩셀렉터신호(nCSx) 하나와 어드레스 신호를 가지고 몇개의
>> 칩셀렉터 신호를 만들기 위해서 사용한것입니다. 만약 단독을 사용할 경우 바로 nCSx를 연결하셨어
>> 사용하시면 됩니다. 따로 74HC138을 사용하여 디코딩 하지 않으셔도 됩니다.
>>
>>
>>그럼 수고하세요.
>>
>>
>>>안녕하세요.
>>>ez-ep9312 보드를 테스트 중인데요..
>>>메뉴얼에 나와있는 DIO예제에서는 A8, A9, A10을 연결하지만 실제로는 A8번만 사용합니다.
>>>이예제를 응용하여 사용할때 유선상으로 어드레스 핀으로 24핀을 사용할 수 있다는 답은 들었는데
>>>그게 A0 부터 A25까지중에 어떤핀을 사용할수 있는지 질문드립니다.
>>>당연히 A0 부터 A23까지 일것 같기는 한데 혹시나 아닐 수도 있을거 같아서요...
>>>답변 부탁 드립니다.
>>
>
소스상의 어드레스가 0x000001 = A0 , 0x000002 = A1 ,0x000004 = A2 이런식으로 정확히 매핑됩니다.
현재 제공되는 커널에서는 A0~ A23까지 24개의 어드레스가 가능합니다. 만약 A24 와 A25를 사용하고자 한다면 아래와 같이 커널을 수정해 주셔야 합니다.
현재 제공된 커널에서는 CS의 가상주소를 0xfx000000 으로 16MByte씩 임의적으로 잡아 놓았습니다.
커널에서 이 주소를 수정하시면 A24, A25도 사용 가능합니다.
static struct map_desc ez_ep9312_io_desc[] __initdata = {
{ EP93XX_AHB_BASE, io_v2p(EP93XX_AHB_BASE), SZ_1M, MT_DEVICE },
{ EP93XX_APB_BASE, io_v2p(EP93XX_APB_BASE), SZ_8M, MT_DEVICE },
{ 0xf1000000, EP9312_CS1_PHYS +0x000000, 0x00100000, MT_DEVICE }, // nCS1 NAND-Flash
{ 0xf2000000, EP9312_CS2_PHYS , 0x01000000, MT_DEVICE }, // nCS2 16MByte Area
{ 0xf3000000, EP9312_CS3_PHYS , 0x01000000, MT_DEVICE }, // nCS3 16MByte Area
{ 0xf4000000, EP9312_CS6_PHYS , 0x01000000, MT_DEVICE }, // nCS4 16MByte Area
{ 0xf5000000, EP9312_CS7_PHYS , 0x01000000, MT_DEVICE }, // nCS5 16MByte Area
};
이 설정을 A24 어드레스를 사용가능하게 할려면
static struct map_desc ez_ep9312_io_desc[] __initdata = {
{ EP93XX_AHB_BASE, io_v2p(EP93XX_AHB_BASE), SZ_1M, MT_DEVICE },
{ EP93XX_APB_BASE, io_v2p(EP93XX_APB_BASE), SZ_8M, MT_DEVICE },
{ 0xf1000000, EP9312_CS1_PHYS +0x000000, 0x00100000, MT_DEVICE }, // nCS1 NAND-Flash
{ 0xf3000000, EP9312_CS2_PHYS , 0x02000000, MT_DEVICE }, // nCS2 16MByte Area
{ 0xf5000000, EP9312_CS3_PHYS , 0x02000000, MT_DEVICE }, // nCS3 16MByte Area
{ 0xf7000000, EP9312_CS6_PHYS , 0x02000000, MT_DEVICE }, // nCS4 16MByte Area
{ 0xf9000000, EP9312_CS7_PHYS , 0x02000000, MT_DEVICE }, // nCS5 16MByte Area
};
이렇게 수정하시고 하시면 A24와 조합하셨어 사용하실 수 있습니다.
이 가상 주소는 사용자 임의의로 설정하는 것입니다. 하지만 설정한 가상주소가 커널에서 사용하지 않는 주소를 써야 합니다. 만약 0xf900000를 설정하였는데 다른 디바이스에서 이미 이 주소를 할당하고 있다면
충돌이 발생하겠죠.... 따라서 이럴 경우는 아래 참고와 같이 ioremap 함수를 사용하기를 권장합니다.
---- 참고)
현재의 커널들은 위와 같이 가상 주소를 사용하지 않고 ioremap이라는 함수를 통하여 가상주소를 할당 받 사용합니다. 위와 같이 가상 주소를 직접 사용하게 되면 커널에서 사용하는 주소와 간혹 충돌이 발생할 수도 있기때문입니다.
만약 ioremap 함수를 사용할 경우
static struct map_desc ez_ep9312_io_desc[] __initdata = {
{ EP93XX_AHB_BASE, io_v2p(EP93XX_AHB_BASE), SZ_1M, MT_DEVICE },
{ EP93XX_APB_BASE, io_v2p(EP93XX_APB_BASE), SZ_8M, MT_DEVICE },
};
이렇게 커널을 수정하시고 디바이스 드라이버에서 주소 설정시 ioremap 함수를 통하여 가상 주소를 할당 받으시면 됩니다.
그럼 수고하세요.
>제가 설명이 좀 부족했나 보군요..
>DIO 예제의 소스를 보면 CS로 nCS3를 사용합니다. 이 nCS3가 0xf3000000 이고 어드레스A24를
>조합할경우 0xf3000000 + 0x1000000으로 0xf4000000이 되죠. 그런데 이 값은 nCS6 의 값이 됩니다.
>그러므로 A24이상은 사용할수 없게 되더라구요.. 이상의 내용을 가지고 전화상으로 문의 들였더니
>전체 A0 부터 A25 까지 총 26개의 어드레스핀 중에 24개의 어드레스핀만 사용가능하다는 답을
>들었습니다.
>제 질문은 그럼 총 26개의 어드레스핀 중에서 24개의 어드레스핀 을 사용할 수 있다고 하셨는데
>사용할수 있는 어드레스핀이 A0 부터 A25중에 어떤 것인지를 물어보는것 입니다.
>A0 ~ A23 인지 아님 중간에 건너뛰거나 하지는 않는지
>그리고 소스상의 어드레스가 0x000001 = A0 , 0x000002 = A1 ,0x000004 = A2 이런식으로 정확히 매핑이 되는지를 물어보는것입니다. 저도 당연히 A0 ~ A23까지 사용할수 있고 0x000001 = A0 이런식으로 매핑될거라 생각됩니다만 혹시나 해서 질문 드리는 겁니다.
>
>
>>안녕하세요.
>>
>>어드레스는 A0 ~ A25까지 사용가능합니다.
>>
>>>이예제를 응용하여 사용할때 유선상으로 어드레스 핀으로 24핀을 사용할 수 있다는 답은 들었는데
>>>그게 A0 부터 A25까지중에 어떤핀을 사용할수 있는지 질문드립니다.
>>
>>==> 이게 어떤 의미인가요??? 어드레스 핀을 24으로 사용하는데 A0 부터 A25까지중에 어떤핀을 사용할
>> 수 있는지라는 질문이 이해가 가지 않습니다.
>>
>> 어드레스 핀을 상위 비트로 사용하는 이유가 따로 있나요..
>> 이럴 경우 칩셀렉터 신호와 조합할 경우 계산이 복잡해 질 수도 있습니다.
>> 만약 어드레스를 A24을 사용한다면... nCSx + A24 ( 0x1000000) 을 하셔야 합니다.
>>
>>
>>>메뉴얼에 나와있는 DIO예제에서는 A8, A9, A10을 연결하지만 실제로는 A8번만 사용합니다.
>>
>>==> 이렇게 74HC138을 사용한 이유는 칩셀렉터신호(nCSx) 하나와 어드레스 신호를 가지고 몇개의
>> 칩셀렉터 신호를 만들기 위해서 사용한것입니다. 만약 단독을 사용할 경우 바로 nCSx를 연결하셨어
>> 사용하시면 됩니다. 따로 74HC138을 사용하여 디코딩 하지 않으셔도 됩니다.
>>
>>
>>그럼 수고하세요.
>>
>>
>>>안녕하세요.
>>>ez-ep9312 보드를 테스트 중인데요..
>>>메뉴얼에 나와있는 DIO예제에서는 A8, A9, A10을 연결하지만 실제로는 A8번만 사용합니다.
>>>이예제를 응용하여 사용할때 유선상으로 어드레스 핀으로 24핀을 사용할 수 있다는 답은 들었는데
>>>그게 A0 부터 A25까지중에 어떤핀을 사용할수 있는지 질문드립니다.
>>>당연히 A0 부터 A23까지 일것 같기는 한데 혹시나 아닐 수도 있을거 같아서요...
>>>답변 부탁 드립니다.
>>
>