[SPW] SpaceWire ํ”„๋กœํ† ์ฝœ #3: RMAP (2) - Read/RMW

@zunione ยท July 15, 2026 ยท 4 min read

๐Ÿš€ ๋“ค์–ด๊ฐ€๋ฉฐ

RMAP์˜ ์›ฌ๋งŒํ•œ ํŒจํ‚ท ํ•„๋“œ์™€ ํŠธ๋žœ์žญ์…˜์„ ์‚ดํŽด๋ณด๊ธฐ์—๋Š” Write Command ๋งŒํ•œ ๊ฒƒ์ด ์—†๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ๋‚˜๋จธ์ง€ ํŠธ๋žœ์žญ์…˜์„ ๋ญ‰๋šฑ๊ทธ๋ฆฌ๊ณ  ๋„˜์–ด๊ฐˆ ์ˆ˜๋Š” ์—†๋Š” ๋ฒ•.

Read ๋ฐ Read-Modify-Write ๋ช…๋ น์–ด๋„ ๊ธฐ๋ณธ ๊ณจ์กฐ๋Š” ๊ฐ™์ง€๋งŒ ์„ธ๋ถ€ ์„ค์ •๊ณผ ์‹ ๊ฒฝ์จ์•ผ ํ•  ๋ถ€๋ถ„์ด ๋‹ค๋ฅด๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ด ๋‘ ๋ช…๋ น์–ด๋ฅผ ๋‹ค๋ฃจ์–ด ๋ณด๋ ค ํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

์ €์ž‘๊ถŒ ์•ˆ๋‚ด

๋ณธ ํฌ์ŠคํŠธ์— ํฌํ•จ๋œ ์ผ๋ถ€ ์ด๋ฏธ์ง€๋Š” ECSS(European Cooperation for Space Standardization) ๋ฌธ์„œ(ECSS-E-ST-50-52C ๋“ฑ)์—์„œ ๋ฐœ์ทŒ ์บก์ฒ˜ํ•œ ๊ฒƒ์ด๋ฉฐ, ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ ์ €์ž‘๊ถŒ์€ ESA/ECSS์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ์บก์ฒ˜๋Š” ๋น„์ƒ์—…์  ๊ฐœ์ธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์—์„œ์˜ ํ•™์Šต ๋ฐ ์ •๋ณด ๊ณต์œ  ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ, ๊ฐ ์ด๋ฏธ์ง€ ํ•˜๋‹จ์— ์ถœ์ฒ˜ ๋ฌธ์„œ๋ฅผ ํ‘œ๊ธฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ €์ž‘๊ถŒ ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ์ฆ‰์‹œ ์ˆ˜์ • ๋˜๋Š” ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Copyright Notice

Some images in this post are captured excerpts from ECSS (European Cooperation for Space Standardization) documents (e.g., ECSS-E-ST-50-52C), and copyright for those images belongs to ESA/ECSS. These captures are used solely for non-commercial, educational purposes on a personal technical blog, with the source document noted below each image. If you have any copyright issues, please contact me and I will edit or remove the content promptly.

๐Ÿ”– Read Command

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-8
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-8

Read Command๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ํ•„๋“œ๊ฐ€ Write Command์™€ ๊ตฌ์กฐ๊ฐ€ ๊ฐ™๋‹ค. ๋‹จ ์ฝ๊ธฐ ์•ก์…˜์ด๋ฏ€๋กœ Data ๋‚ด์šฉ๊ณผ Data CRC๋Š” ํฌํ•จ๋˜์ง€ ์•Š์•˜๋‹ค.

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-8
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-8

Read Command์˜ Instruction ํ•„๋“œ์—์„œ ์‚ดํŽด๋ณผ ๋ถ€๋ถ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋น„ํŠธ 5๋Š” Write=1, Read=0 ์ด๋ฏ€๋กœ 0์œผ๋กœ ๊ณ ์ •๋œ๋‹ค.
  2. Data CRC๊ฐ€ ์—†์œผ๋ฏ€๋กœ Verify ๋น„ํŠธ๋Š” 0์œผ๋กœ ๊ณ ์ •๋œ๋‹ค.
  3. ์ฝ์€ ๋‚ด์šฉ์„ ๋ฐ›์•„์•ผ ํ•˜๋ฏ€๋กœ Reply(Acknowledge) ๋น„ํŠธ๋Š” 1๋กœ ๊ณ ์ •๋œ๋‹ค.

๐Ÿ“ฅ Read Reply

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-9
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-9

๋ฐ˜๋Œ€๋กœ Read Reply์— Data์™€ Data CRC๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-9
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-9

Reply ํŒจํ‚ท์ด๋ฏ€๋กœ Packet Type=00 ์ด๋‹ค.

๐Ÿ”ฎ Read-Modify-Write

Read-Modify-Write(RMW)๋Š” ์ง€๋‚œ ๋‘ ๋ช…๋ น์–ด์™€ ๋‹ค๋ฅด๊ฒŒ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋ ˆ์ง€์Šคํ„ฐ์˜ ์›์ž์  ์ ‘๊ทผ์„ ์œ„ํ•œ ๋ช…๋ น์–ด์ด๋‹ค.

์—ฌ๋Ÿฌ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๊ฐ™์€ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ, write๋กœ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋ฎ์–ด์“ฐ๋ฉด ๊ทธ ์‚ฌ์ด์— ๋‹ค๋ฅธ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฐ”๊ฟ”๋†“์€ ๋น„ํŠธ๋ฅผ ๋‚ ๋ ค๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค. RMW๋Š” ๋น„ํŠธ ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ target ์ชฝ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ๋น„ํŠธ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

Data   [[1]] [0] [0] [0] [[1]] [[0]] [[0]] [0]
Mask   [[1]] [0] [0] [0] [[1]] [[1]] [[1]] [0] <- This has to be 1
Read   [[1]] [1] [1] [0] [[0]] [[0]] [[1]] [1]
Result [[1]] [1] [1] [0] [[1]] [[0]] [[0]] [1]

์ด์ค‘ ๋Œ€๊ด„ํ˜ธ๋กœ ํ‘œ์‹œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ Mask ๋น„ํŠธ๊ฐ€ 1์ธ ์œ„์น˜๋Š” Data ํ•„๋“œ์˜ ๊ฐ’์œผ๋กœ ๋ฎ์–ด์จ์ง€๊ณ , Mask ๋น„ํŠธ๊ฐ€ 0์ธ ์œ„์น˜๋Š” ์›๋ž˜ Read ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

๐Ÿชก Read-Modify-Write Command

Instruction

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-15
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-15

RMW์˜ Instruction ํ•„๋“œ๋Š” ๋ชจ๋“  ๊ฐ’์ด ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-15
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-15

  • Packet Type: 01=Command
  • Write/Read=0: Read ๋ช…๋ น๊ณผ ๋™์ผํ•˜๊ฒŒ clear ์ƒํƒœ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • Verify=yes: RMW๋ฅผ ์ผ๋ฐ˜ Read ๋ช…๋ น๊ณผ ๊ตฌ๋ถ„์ง“๋Š”๋‹ค.
  • Reply=yes: ํ•ด๋‹น ์ฃผ์†Œ์— ์›๋ž˜ ๋“ค์–ด์žˆ๋˜ ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค.
  • Increment=yes: ์—ฌ๋Ÿฌ ๋ฐ”์ดํŠธ์— ๊ฑธ์ณ RMW๊ฐ€ ์ ์šฉ๋  ๊ฒฝ์šฐ ์ฃผ์†Œ๊ฐ€ ์ž๋™์œผ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค.

Data Length

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-15
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-15

RMW์˜ Data Length ํ•„๋“œ๋Š” Data ํ•„๋“œ์™€ Mask ํ•„๋“œ์˜ ๊ธธ์ด๋ฅผ ํ•ฉํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2๋ฐ”์ดํŠธ ์›Œ๋“œ๋ฅผ RMWํ•˜๋Š” ๊ฒฝ์šฐ Data 2๋ฐ”์ดํŠธ + Mask 2๋ฐ”์ดํŠธ๋กœ Data Length๋Š” 0x04๊ฐ€ ๋œ๋‹ค.

์ตœ๋Œ€ 4๋ฐ”์ดํŠธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Data Length๋Š” 0x00, 0x02, 0x04, 0x06, 0x08 ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

Mask

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-15
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-15

์•ž์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ์— ์‹ค์ œ๋กœ ์–ด๋–ค ๊ฐ’์„ ์จ๋„ฃ์„์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. Data์™€ ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Written Data = (Mask AND Command_Data) OR (NOT Mask AND Read_Data)

๋‹ค๋งŒ Read ๊ฐ’๊ณผ Mask, Data๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฐฉ์‹ ์ž์ฒด๋Š” ๊ทœ๊ฒฉ์—์„œ ๊ฐ•์ œํ•˜์ง€ ์•Š๊ณ  target ์ชฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌํ˜„์— ๋งก๊ฒจ์ ธ ์žˆ๋‹ค. ์œ„ ๋ฐฉ์‹์€ ํ•˜๋‚˜์˜ ์˜ˆ์‹œ์ผ ๋ฟ์ด๋ฉฐ, target์— ๋”ฐ๋ผ test-and-set๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์กฐํ•ฉ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ‘Œ๐Ÿป Read-Modify-Write Reply

RMW Reply์—๋Š” Modifyํ•˜๊ธฐ ์ „ Read ๊ฐ’์ด ํ•จ๊ป˜ ์‹ค๋ ค์„œ ๋ฐ˜ํ™˜๋œ๋‹ค. Initiator๋Š” ์ด ๊ฐ’์„ ํ†ตํ•ด ์ˆ˜์ • ์ „ ๋ ˆ์ง€์Šคํ„ฐ ์ƒํƒœ๋„ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Instruction

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-17
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-17

  • Packet Type: 00=Reply

Data Length

์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-17
์ถœ์ฒ˜: ECSS-E-ST-50-52C, Figure 5-17

Command์—์„œ๋Š” Data์™€ Mask๋ฅผ ๋ชจ๋‘ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋‘˜์„ ํ•ฉํ•œ ๊ฐ’์ด์ง€๋งŒ, Reply์—์„œ๋Š” Data๋งŒ ๋‹ด๊ฒจ ์žˆ์œผ๋ฏ€๋กœ 0x00 ~ 0x04์˜ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

โœจ ๋งˆ์น˜๋ฉฐ

RMAP์ด RMW๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€๋งŒ, ์‹ค์ œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ Write/Read Command์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๋งค๋‰ด์–ผ์„ ์‚ดํŽด๋ณด๋ฉด RMW๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ์ง€์›๋œ๋‹ค๊ณ  ์ ํ˜€ ์žˆ์œผ๋‹ˆ, ๋งŒ์•ฝ ๊ณต์‹ ์ŠคํŽ™์„ ๋ฐ”ํƒ•์œผ๋กœ IP๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•ด ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด ๋ณด์ธ๋‹ค.

SpaceWire์˜ ์ƒ์œ„ ํ”„๋กœํ† ์ฝœ๋กœ๋Š” CCSDS packet transfer protocol์ด ๋˜ ์žˆ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋œ๋‹ค๋ฉด ์ด ํ”„๋กœํ† ์ฝœ๋„ ๊ณต๋ถ€ํ•˜์—ฌ ๋‹ค๋ค„ ๋ณด๊ณ  ์‹ถ๋‹ค.

@zunione
์ „ํฌ์›