[W7500x]어떻게 SRAM 48K까지 사용할수 있나요?

[W7500x]어떻게 SRAM 48K까지 사용할수 있나요?

SRAM에 대한 내용은 간단히 말씀 드리면 Socket Memory용으로 할당된 SRAM의 주소를 다른 용도로 사용할 수 있다는 말인데 해당 기능을 사용 하기 위한 별도의 장치는 없습니다.
Socket buffer를 설정하고 해당 Socket buffer의 주소를 Application에서 사용하면 되는 거죠…

정확히 이해 하시려면 Socket buffer의 주소가 어떤 식으로 mapping되는지 이해하면 됩니다. 첨부된 이미지를 참고하시면 이해가 좀더 쉽습니다…

아래 그림과 같이 TOE의 주소는 0x4600_0000~0x4700_0000입니다.

TOE 안의 주소를 더 자세히 보게 되면 아래와 같이 주소가 mapping되어 있는 것을 알 수 있습니다.

여기서 헷갈리는 개념이 실제 Socket Rx Buffer 64K의 크기와 PHYSICAL로 할당된 실제 Socket buffer가 mapping 되는 개념 입니다…
Socket0 TX buffer를 16KB로 할당하였을 시를 예를 들어보겠습니다.
Socket0 TX buffer의 PHYSICAL memory의 크기는 16K입니다 하지만 W7500의 memory mapping에 의하여 0x4602_0000, 0x4602_4000, 0x4602_8000 그리고 0x4602_C000 모두 PHYSICAL Socket0 TX memory의 0x0000번지를 가리키게 됩니다.

여기까지 그냥 memory mapping이 저렇게 되는구나 하고 이해하시면 됩니다.
하지만 저 Socket memory를 SRAM으로 사용할 시에는 이런 점에 주의하셔서 사용을 하셔야 합니다.

또한 32K를 연속적인 주소로 사용하는 방법은 Socket 0의 경우 Tx~Rx 순으로 연속되도록 사용하시면 됩니다.
예를 들어 Socket 0 Tx/Rx Memory를 16K로 설정하면 0x4602_C000~0x4603_3FFF 까지 연속적으로 32K를 사용하실 수 있습니다.

원하는 Socket에 원하는 크기의 Tx/Rx Buffer(각 각 1,2,4,8,16K 가능)를 설정 후 해당 주소를 SRAM으로 사용하시면 됩니다.

TCP Socket도 같이 사용하고 싶은 경우를 예로 들겠습니다.

Socket 0~3까지 모두 Tx/Rx 2K씩 설정하여 사용한다고 가정하겠습니다. 남은 메모리는 16K입니다. 이를 Socket 4~7중 하나로 할당하여 사용합니다. 저는 Socket 7에 할당해 보겠습니다.
Socket 7은 Tx/Rx 각각 8K로 설정합니다. 그리고 SRAM 주소로 461E_E000~461F_1FFF 를 사용하면 됩니다.

Socket Buffer를 설정하는 방법은 Sn_TXBUF_SIZE와 Sn_RXBUF_SIZE register를 설정하시면 됩니다.