<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>별온 기록소</title>
    <link>https://karniff.tistory.com/</link>
    <description>개발 및 IT, 사진, 여행과 관련된 관련 정보를 담는 블로그.
간단하게 말하면 명확한 주제 없는 블로그입니다. ^^;;</description>
    <language>ko</language>
    <pubDate>Wed, 10 Jun 2026 07:26:11 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>별빛의온기</managingEditor>
    <item>
      <title>[투자노트] 대한항공 주가 전망 분석:여객을 넘어 우주항공으로</title>
      <link>https://karniff.tistory.com/entry/stock-korea-air</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HOUjv/btsOPx8jgkn/r85R1Ijh8W9OKP8KHkh8EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HOUjv/btsOPx8jgkn/r85R1Ijh8W9OKP8KHkh8EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HOUjv/btsOPx8jgkn/r85R1Ijh8W9OKP8KHkh8EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHOUjv%2FbtsOPx8jgkn%2Fr85R1Ijh8W9OKP8KHkh8EK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;585&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;padding: 0.5em; margin: 0.5em 0em; color: #4891cf; border-left: 10px solid #4891cf; border-bottom: 2px #4891cf solid;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기업 소개&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;336&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;대한항공은 여객 및 화물 운송을 중심으로 하는 대한민국 최대의 항공사입니다. 주력 사업은 여객 사업, 화물 사업, 정비(MRO) 사업, 그리고 항공우주사업 등으로 구성되어 있으며, 종합 항공 산업의 중심적인 역할을 수행하고 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;336&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;641&quot; data-start=&quot;546&quot; data-ke-size=&quot;size16&quot;&gt;진에어, 에어부산, 에어서울, 한진정보통신 등 다양한 계열사를 보유하고 있으며, 최근에는 아시아나항공 인수를 통해 국내 유일의 메이저급 항공사로 자리매김하였습니다. 더불어 일본 현지에 'Korean Air Investment Japan'을 설립하여 부동산 투자 및 임대업으로도 사업 영역을 넓히고 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;641&quot; data-start=&quot;546&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;padding: 0.5em; margin: 0.5em 0em; color: #4891cf; border-left: 10px solid #4891cf; border-bottom: 2px #4891cf solid;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;주요 사업 부문&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;597&quot; data-start=&quot;444&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 여객 운송 부문&lt;/b&gt;&lt;br /&gt;대한항공 전체 매출에서 50~60%를 차지할 정도로&amp;nbsp; 가장 큰 비중을 차지하며, 국제선이 약 95%, 국내선은 약 5%를 담당하고 있습니다. 2025년 3월 기준, 총 138대의 여객기를 보유하고 있으며, 국내 10개 도시와 해외 33개국 95개 도시에 취항하고 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;597&quot; data-start=&quot;444&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;745&quot; data-start=&quot;599&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 화물 운송 부문&lt;/b&gt;&lt;br /&gt;전체 매출 비중의 약 20~30%로, 반도체&amp;middot;배터리 부품과 같은 산업재부터 의류&amp;middot;신선식품&amp;middot;의약품 등 소비재 및 특수화물까지 다양한 품목을 취급하고 있습니다. 현재 23대의 화물기를 운용하며, 해외 26개국 45개 도시에 취항 중입니다.&lt;/p&gt;
&lt;p data-end=&quot;745&quot; data-start=&quot;599&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;826&quot; data-start=&quot;747&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 정비 및 MRO 부문&lt;/b&gt;&lt;br /&gt;항공기 유지보수 및 정비 서비스를 제공하며, 안정적인 기술력 기반으로 국내외 항공사와 협력하고 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;826&quot; data-start=&quot;747&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1027&quot; data-start=&quot;828&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 항공우주사업 부문&lt;/b&gt;&lt;br /&gt;군용기 MRO, 무인기, 항공기 구조물 등 고부가가치 분야에 집중하고 있으며, 특히 보잉과 에어버스 항공기의 주요 부품을 설계&amp;middot;제작&amp;middot;납품 중입니다. 최근에는 대형 무인기의 양산 계약을 체결하였고, 해외 수출 확대도 적극 추진하고 있습니다. 여객 중심의 수익 구조에서 벗어나기 위한 중장기 성장 동력으로 주목받는 부문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;padding: 0.5em; margin: 0.5em 0em; color: #4891cf; border-left: 10px solid #4891cf; border-bottom: 2px #4891cf solid;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;종목 분류&lt;/b&gt;&lt;/h2&gt;
&lt;p id=&quot;SE-21e26b3e-d2e2-11ea-9d0f-39e94c49d829&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;대한항공은 전통적으로 항공업 및 소비 산업에 속하지만, 향후 항공우주 및 방산 섹터 편입 가능성도 있습니다. 국제 유가와 밀접한 연관을 가지며, 글로벌 정세와도 직접적인 영향을 주고받습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;padding: 0.5em; margin: 0.5em 0em; color: #4891cf; border-left: 10px solid #4891cf; border-bottom: 2px #4891cf solid;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;투자 고려 사항&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-21e26b3e-d2e2-11ea-9d0f-39e94c49d829&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1. 중동 정세와 유가의 영향&lt;/b&gt; &lt;br /&gt;최근 이란과 이스라엘 간의 무력 충돌로 국제 유가가 급등하면서 항공 업계 전반에 부정적 영향을 주었습니다. 그러나 6월 24일 아침, 양국 간 '조건부 휴전' 소식이 전해지며 유가는 안정세를 보였고, 이에 따라 항공주 주가도 반등하는 흐름을 보였습니다. 대체적으로 국내 전체 종목이 상승한편이라 급등이라고 표현하기 애매한 상승률이지만 긍정적인 뉴스가 뜬것은 분명합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이에 따라 국제 유가는 떨어진 상태이며, 이는 항공산업 전반에 긍정적인 소식을 불러 일으킨 상태입니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;다만, 이란은 이스라엘이 공격을 중단하면 우리도 군사적 대응을 중단한다는 뉘앙스로 발표한 상태고, 양국 모두 확실하게 종전이나 휴전을 이야기 하지 않은점은 투자에 유의해야 할 것으로 보여집니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2. 차트 분석&lt;/b&gt; &lt;br /&gt;&amp;nbsp;대한항공의 차트는 저점에서 매수하기 긍정적인 상태입니다. 글을 최초로 작성한 시점(6/23)에서는 꽤 낮은 상태였지만, 현재 글 작성을 완료해버린 오늘자(6/24)에는 주가가 급등을 해버려서 단기적으론 조심스럽게 이야기 할 수 밖에 없지만, 장기적으로 보았을땐 긍정적인 차트 모양을 유지하고 있다고 보여집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vBNOh/btsOMnfEec1/YZzRonJ5LAvisuQKzkpfak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vBNOh/btsOMnfEec1/YZzRonJ5LAvisuQKzkpfak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vBNOh/btsOMnfEec1/YZzRonJ5LAvisuQKzkpfak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvBNOh%2FbtsOMnfEec1%2FYZzRonJ5LAvisuQKzkpfak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;349&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt; 3. 수급 분석&lt;/b&gt; &lt;br /&gt;&amp;nbsp;최근 대한항공 수급은 개인이 집중적으로 매수하고 기관과 외국인이 집중적으로 매도하고 있습니다. 따라서 단기적인 조정에 들어갔지만, 개인의 매수량에 비해 신용물량이 급격하게 늘어나지 않은것으로 보아 반대매매에 대한 리스크는 적습니다. 대차 잔고 또한 최고점대비 30% 감소했기에 현재로써는 나쁘지 않은 포지션으로 보여집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;4. 계절적 수요 증가 &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;7월은 전통적으로 여행 수요가 증가하는 시기로, 항공사들의 매출과 주가가 상승하는 경향이 있습니다. 차트를 보시면 6월말~7월초중순은 대부분 대한항공 주가는 상승했으므로 계절적 모멘텀도 긍정적으로 작용할 수 있습니다.&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt; 5. 방산 입찰 참여 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1917&quot; data-start=&quot;1724&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;대한항공은 현재 약 1조 9천억 원 규모의 &amp;lsquo;한국형 전자전기 사업&amp;rsquo; 입찰에 참여 중입니다. 이 사업은 5월 공고 후 7월 제안서 평가, 10월 계약 체결이 예정되어 있으며, KAI(한국항공우주산업)와 경쟁 중입니다. 컨소시엄을 구성한 LIG넥스원은 핵심 전자전 장비를 개발하고 있어 대한항공과의 협력도 기대됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2040&quot; data-start=&quot;1919&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;또한, 대한항공은 UH-60 헬기 성능개량 사업의 우선협상대상자로 선정되는 등 국방 분야에서도 기술력을 인정받고 있습니다.&lt;br /&gt;해당 사업은 LIG넥스원이 수주한 사업이라 LIG의 영향력이 높을것으로 생각되며, 위와 같이 대한항공의 항공기술을 괜찮게 평가하는듯한 최근의 행보를 보이고 있다는점도 긍정적입니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2040&quot; data-start=&quot;1919&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2040&quot; data-start=&quot;1919&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;방산 및 항공우주사업의 수주 확정 시, 미래 성장 동력 확보에 결정적인 전환점이 될 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-21e3cafa-d2e2-11ea-9d0f-1760eea58f1a&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://www.bizhankook.com/bk/article/28959&quot;&gt;'1조 9000억' 규모 한국형 전자전기 사업, KAI&amp;middot;대한항공 격돌 | 비즈한국&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750733345098&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;'1조 9000억' 규모 한국형 전자전기 사업, KAI&amp;middot;대한항공 격돌&quot; data-og-description=&quot;5월 입찰공고 후 2034년 공군 인도 계획&amp;hellip;전자전 핵심 장비는 LIG넥스원 개발&amp;middot;생산할 듯&quot; data-og-host=&quot;www.bizhankook.com&quot; data-og-source-url=&quot;https://www.bizhankook.com/bk/article/28959&quot; data-og-url=&quot;https://www.bizhankook.com/bk/article/28959&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/P2AxL/hyZcpTkdme/iO2qrTvaBYds8521v4hOh0/img.jpg?width=860&amp;amp;height=577&amp;amp;face=0_0_860_577,https://scrap.kakaocdn.net/dn/bPBzG6/hyZbqkAvkq/koheqTdyONw0ujYazyOjY0/img.jpg?width=860&amp;amp;height=577&amp;amp;face=0_0_860_577&quot;&gt;&lt;a href=&quot;https://www.bizhankook.com/bk/article/28959&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.bizhankook.com/bk/article/28959&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/P2AxL/hyZcpTkdme/iO2qrTvaBYds8521v4hOh0/img.jpg?width=860&amp;amp;height=577&amp;amp;face=0_0_860_577,https://scrap.kakaocdn.net/dn/bPBzG6/hyZbqkAvkq/koheqTdyONw0ujYazyOjY0/img.jpg?width=860&amp;amp;height=577&amp;amp;face=0_0_860_577');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;'1조 9000억' 규모 한국형 전자전기 사업, KAI&amp;middot;대한항공 격돌&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;5월 입찰공고 후 2034년 공군 인도 계획&amp;hellip;전자전 핵심 장비는 LIG넥스원 개발&amp;middot;생산할 듯&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.bizhankook.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://news.koreanair.com/%EB%8C%80%ED%95%9C%ED%95%AD%EA%B3%B5-uh-60-%ED%97%AC%EA%B8%B0-%EC%84%B1%EB%8A%A5%EA%B0%9C%EB%9F%89-%EC%9A%B0%EC%84%A0%ED%98%91%EC%83%81%EB%8C%80%EC%83%81%EC%9E%90%EB%A1%9C-%EC%84%A0%EC%A0%95/&quot;&gt;대한항공, UH-60 헬기 성능개량 우선협상대상자로 선정 &amp;ndash; 대한항공 뉴스룸&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750733601863&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;대한항공, UH-60 헬기 성능개량 우선협상대상자로 선정 &amp;ndash; 대한항공 뉴스룸&quot; data-og-description=&quot;대한항공은 우리 군 주요 전력인 UH-60 헬기의 성능개량을 진행할 우선협상대상자로 선정됐다고 23일 밝혔다. 대한항공은 LIG넥스원, 콜린스에어로스페이스와 컨소시엄을 꾸려 입찰에 참여했고, &quot; data-og-host=&quot;news.koreanair.com&quot; data-og-source-url=&quot;https://news.koreanair.com/%EB%8C%80%ED%95%9C%ED%95%AD%EA%B3%B5-uh-60-%ED%97%AC%EA%B8%B0-%EC%84%B1%EB%8A%A5%EA%B0%9C%EB%9F%89-%EC%9A%B0%EC%84%A0%ED%98%91%EC%83%81%EB%8C%80%EC%83%81%EC%9E%90%EB%A1%9C-%EC%84%A0%EC%A0%95/&quot; data-og-url=&quot;https://news.koreanair.com/%eb%8c%80%ed%95%9c%ed%95%ad%ea%b3%b5-uh-60-%ed%97%ac%ea%b8%b0-%ec%84%b1%eb%8a%a5%ea%b0%9c%eb%9f%89-%ec%9a%b0%ec%84%a0%ed%98%91%ec%83%81%eb%8c%80%ec%83%81%ec%9e%90%eb%a1%9c-%ec%84%a0%ec%a0%95/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mmYX6/hyZcfwnYha/aXU4ykXW9O4NkorcZWSxA1/img.jpg?width=1466&amp;amp;height=1042&amp;amp;face=0_0_1466_1042,https://scrap.kakaocdn.net/dn/b0qtoS/hyZcpFKhPa/1ZKHkK5Yg8RN2yOXhF9VPk/img.png?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627,https://scrap.kakaocdn.net/dn/cpEtfv/hyZbCFjMOM/sR2LqdzXYni10GaiGnGZXK/img.jpg?width=1466&amp;amp;height=1042&amp;amp;face=0_0_1466_1042&quot;&gt;&lt;a href=&quot;https://news.koreanair.com/%EB%8C%80%ED%95%9C%ED%95%AD%EA%B3%B5-uh-60-%ED%97%AC%EA%B8%B0-%EC%84%B1%EB%8A%A5%EA%B0%9C%EB%9F%89-%EC%9A%B0%EC%84%A0%ED%98%91%EC%83%81%EB%8C%80%EC%83%81%EC%9E%90%EB%A1%9C-%EC%84%A0%EC%A0%95/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://news.koreanair.com/%EB%8C%80%ED%95%9C%ED%95%AD%EA%B3%B5-uh-60-%ED%97%AC%EA%B8%B0-%EC%84%B1%EB%8A%A5%EA%B0%9C%EB%9F%89-%EC%9A%B0%EC%84%A0%ED%98%91%EC%83%81%EB%8C%80%EC%83%81%EC%9E%90%EB%A1%9C-%EC%84%A0%EC%A0%95/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mmYX6/hyZcfwnYha/aXU4ykXW9O4NkorcZWSxA1/img.jpg?width=1466&amp;amp;height=1042&amp;amp;face=0_0_1466_1042,https://scrap.kakaocdn.net/dn/b0qtoS/hyZcpFKhPa/1ZKHkK5Yg8RN2yOXhF9VPk/img.png?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627,https://scrap.kakaocdn.net/dn/cpEtfv/hyZbCFjMOM/sR2LqdzXYni10GaiGnGZXK/img.jpg?width=1466&amp;amp;height=1042&amp;amp;face=0_0_1466_1042');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;대한항공, UH-60 헬기 성능개량 우선협상대상자로 선정 &amp;ndash; 대한항공 뉴스룸&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;대한항공은 우리 군 주요 전력인 UH-60 헬기의 성능개량을 진행할 우선협상대상자로 선정됐다고 23일 밝혔다. 대한항공은 LIG넥스원, 콜린스에어로스페이스와 컨소시엄을 꾸려 입찰에 참여했고,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;news.koreanair.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p id=&quot;SE-21e578c2-d2e2-11ea-9d0f-87b24a150f5d&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;&lt;br /&gt;글 작성 시점 주가 : 23,100원.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;&lt;br /&gt;[전망 및 개인 의견]&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2191&quot; data-start=&quot;2057&quot; data-ke-size=&quot;size16&quot;&gt;대한항공은 단순한 항공사가 아닌, 우주&amp;middot;방산 등 미래 먹거리를 확보하며 새로운 성장 전략을 실행 중입니다. 차트 상으로도 장기 상승 가능성이 충분하며, 여름 여행 수요 증가 및 방산 수주 기대감이 복합적으로 작용할 수 있는 시점입니다.&lt;/p&gt;
&lt;p data-end=&quot;2279&quot; data-start=&quot;2193&quot; data-ke-size=&quot;size16&quot;&gt;현재 주가는 단기 급등 이후의 구간이므로 분할 매수 또는 눌림목을 노리는 전략이 바람직할 수도 있으나, 중장기 관점에서는 여전히 유망한 종목이라 판단됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-21e5ee02-d2e2-11ea-9d0f-ab1ee650ba49&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; ※ 본 글은 개인적인 투자 의견이며, 투자 판단의 책임은 투자자 본인에게 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-21e61518-d2e2-11ea-9d0f-ed48dc0ef82d&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>경제/주식</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/367</guid>
      <comments>https://karniff.tistory.com/entry/stock-korea-air#entry367comment</comments>
      <pubDate>Tue, 24 Jun 2025 11:59:28 +0900</pubDate>
    </item>
    <item>
      <title>STM32CubeIDE SDK 경로 따로 관리되어있을때 연결하는 팁.</title>
      <link>https://karniff.tistory.com/entry/STM32CubeIDE-SDK-%EA%B2%BD%EB%A1%9C-%EB%94%B0%EB%A1%9C-%EA%B4%80%EB%A6%AC%EB%90%98%EC%96%B4%EC%9E%88%EC%9D%84%EB%95%8C-%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94-%ED%8C%81</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H4Irx/btsOCgUYZYD/WWpeUGfW7gBkN5ivkf1q90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H4Irx/btsOCgUYZYD/WWpeUGfW7gBkN5ivkf1q90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H4Irx/btsOCgUYZYD/WWpeUGfW7gBkN5ivkf1q90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH4Irx%2FbtsOCgUYZYD%2FWWpeUGfW7gBkN5ivkf1q90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;505&quot; height=&quot;505&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발시 SDK를 위치를 구성할때 기본 경로보다 SDK를 따로 관리하는 폴더로 구성하는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 팁은 STM32CubeMX를 통해 SDK를 별도의 폴더에 옮겨놨다는 전제하에 진행하는 방법을 설명합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(아래와 같이 설정했다는 전제하)&lt;/p&gt;
&lt;figure id=&quot;og_1750090404244&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;STM32CubeMX 패키지 경로 변경하기. (Changing the STM32CubeMX Repository Folder Location)&quot; data-og-description=&quot;개발시 SDK를 위치를 구성할때 기본 경로보다 SDK를 따로 관리하는 폴더로 구성하는 경우가 많습니다. STM32CubeMX의 경우, 펌웨어 Repository의 기본 설치 경로는 &amp;quot;C:/Users/(User name)/STM32Cube/Repository&amp;quot;입니&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32CubeMX-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B2%BD%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-Changing-the-STM32CubeMX-Repository-Folder-Location&quot; data-og-url=&quot;https://starlighton.com/entry/STM32CubeMX-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B2%BD%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-Changing-the-STM32CubeMX-Repository-Folder-Location&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5MIWH/hyY8bg3sQk/chYCg3K9ndN86qnrZZjh01/img.png?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/cznFVD/hyY8Zm8jK1/OlVyk15AED8YKtModDxZbK/img.png?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/yC9Jk/hyY7ZOsJgn/N12yawg27846aGz6MMsVsk/img.png?width=1536&amp;amp;height=1024&amp;amp;face=0_0_1536_1024&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32CubeMX-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B2%BD%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-Changing-the-STM32CubeMX-Repository-Folder-Location&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32CubeMX-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B2%BD%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-Changing-the-STM32CubeMX-Repository-Folder-Location&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5MIWH/hyY8bg3sQk/chYCg3K9ndN86qnrZZjh01/img.png?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/cznFVD/hyY8Zm8jK1/OlVyk15AED8YKtModDxZbK/img.png?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/yC9Jk/hyY7ZOsJgn/N12yawg27846aGz6MMsVsk/img.png?width=1536&amp;amp;height=1024&amp;amp;face=0_0_1536_1024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;STM32CubeMX 패키지 경로 변경하기. (Changing the STM32CubeMX Repository Folder Location)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개발시 SDK를 위치를 구성할때 기본 경로보다 SDK를 따로 관리하는 폴더로 구성하는 경우가 많습니다. STM32CubeMX의 경우, 펌웨어 Repository의 기본 설치 경로는 &quot;C:/Users/(User name)/STM32Cube/Repository&quot;입니&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 STM32CubeMX에서 SDK를 따로 관리하고 있다면, STM32CubeIDE에서도 똑같은 SDK를 보도록 하고 싶을것입니다. 하지만, STM32CubeIDE는 STM32CubeMX와 다르게 기본 경로 변경이 어렵습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 경로는 유지하되 같은 SDK 폴더를 바라보도록 설정하는 방법에 대해서 설명하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #e5173b; border-left: 10px solid #e5173b; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;STM32CubeIDE 와 STM32CubeMX SDK를 같이 관리하도록 하는 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공통의 SDK를 바라보도록 하는 방법은 심볼링 링크(symbolic link)를 이용하는 방법입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수행하기전에 STM32CubeMX에서 설정을 통해 RepositoryPath가&lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;D:/STM32/Repository/ &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 가정하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. STM32CubeIDE 프로그램이 실행되지 않은 상태로 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. C:\Users\&amp;lt;사용자명&amp;gt;\STM32Cube\Repository 폴더를 생성합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1ZTo1/btsOCygQdup/UMeRACJSkf8XthmoyU7QN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1ZTo1/btsOCygQdup/UMeRACJSkf8XthmoyU7QN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1ZTo1/btsOCygQdup/UMeRACJSkf8XthmoyU7QN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1ZTo1%2FbtsOCygQdup%2FUMeRACJSkf8XthmoyU7QN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;707&quot; height=&quot;162&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. CMD(명령 프롬프트)를 관리자 권한으로 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oF5cs/btsOCRtFTjs/9OF2pt87mZhQ4g71Xg5VIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oF5cs/btsOCRtFTjs/9OF2pt87mZhQ4g71Xg5VIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oF5cs/btsOCRtFTjs/9OF2pt87mZhQ4g71Xg5VIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoF5cs%2FbtsOCRtFTjs%2F9OF2pt87mZhQ4g71Xg5VIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;706&quot; height=&quot;329&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 아래와 같이 심볼릭 링크 생성 명령어를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;mklink /D &quot;C:\Users\&amp;lt;사용자명&amp;gt;\STM32Cube\Repository&quot; &quot;SDK Repository 경로&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 D:/STM32/Repository에 설치했으므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;mklink /D &quot;C:\Users\&amp;lt;사용자명&amp;gt;\STM32Cube\Repository&quot; &quot;D:/STM32/Repository&quot;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;5. STM32CubeIDE를 실행하여 해당 IDE에서 프로젝트를 생성하면 SDK를 다운로드 하지 않고 연결된 SDK를 사용합니다.&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/366</guid>
      <comments>https://karniff.tistory.com/entry/STM32CubeIDE-SDK-%EA%B2%BD%EB%A1%9C-%EB%94%B0%EB%A1%9C-%EA%B4%80%EB%A6%AC%EB%90%98%EC%96%B4%EC%9E%88%EC%9D%84%EB%95%8C-%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94-%ED%8C%81#entry366comment</comments>
      <pubDate>Tue, 17 Jun 2025 01:27:05 +0900</pubDate>
    </item>
    <item>
      <title>STM32CubeMX 패키지 경로 변경하기. (Changing the STM32CubeMX Repository Folder Location)</title>
      <link>https://karniff.tistory.com/entry/STM32CubeMX-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B2%BD%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-Changing-the-STM32CubeMX-Repository-Folder-Location</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Birv6/btsN7xvAtLk/sA3U0hZV1aPEPhpsXgNWEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Birv6/btsN7xvAtLk/sA3U0hZV1aPEPhpsXgNWEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Birv6/btsN7xvAtLk/sA3U0hZV1aPEPhpsXgNWEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBirv6%2FbtsN7xvAtLk%2FsA3U0hZV1aPEPhpsXgNWEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;492&quot; height=&quot;1024&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발시 SDK를 위치를 구성할때 기본 경로보다 SDK를 따로 관리하는 폴더로 구성하는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STM32CubeMX의 경우, 펌웨어 Repository의 기본 설치 경로는 &quot;C:/Users/(User name)/STM32Cube/Repository&quot;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이 경로를 변경하고 싶어도, STM32CubeMX 설정 화면에서는 해당 항목이 &lt;b&gt;비활성화되어 있어 직접 수정할 수 없습니다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yTfni/btsN7wXOMAW/fNYsEDi0efSOhIuHPGHxlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yTfni/btsN7wXOMAW/fNYsEDi0efSOhIuHPGHxlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yTfni/btsN7wXOMAW/fNYsEDi0efSOhIuHPGHxlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyTfni%2FbtsN7wXOMAW%2FfNYsEDi0efSOhIuHPGHxlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;589&quot; height=&quot;240&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 이 기본 경로를 다른 위치로 변경하고 싶다면, 아래 방법을 통해 설정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;padding: 0.3em 0.5em 0.3em 0.5em; margin: 0.5em 0em; color: #e5173b; border-left: 10px solid #e5173b; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;STM32CubeMX 패키지 기본 설치 경로 변경 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 숨김 파일이 보이도록 설정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7; text-align: center;&quot;&gt;[Windows]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 탐색기에서 상단 메뉴의&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; &lt;b&gt;보기 - 표시 - 숨긴항목 체크&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7; text-align: start;&quot;&gt;[Mac]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;아래 단축키 입력&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; &lt;b&gt;Command + Shift + .&lt;/b&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. STM32CubeMX 프로그램이 실행되지 않은 상태에서, 다음 경로를 엽니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;[Windows]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;C:\Users\(User Name)\.stm32cubemx\plugins\updater&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7; text-align: start;&quot;&gt;[Mac]&lt;/span&gt; &lt;span style=&quot;color: #006dd7; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;/Users/(User Name)/.stm32cubemx/plugins/updater&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경로는 STM32CubeMX 설치 시 기본으로 생성되는 위치입니다. 만약 설치 시 경로를 변경했다면, 해당 위치에 맞는 .stm32cubemx 폴더를 열어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddpuvx/btsN6l3Hb0v/1jJpOKq2aSbpHOC0xMiQVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddpuvx/btsN6l3Hb0v/1jJpOKq2aSbpHOC0xMiQVk/img.png&quot; data-alt=&quot;Windows&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddpuvx/btsN6l3Hb0v/1jJpOKq2aSbpHOC0xMiQVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fddpuvx%2FbtsN6l3Hb0v%2F1jJpOKq2aSbpHOC0xMiQVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;738&quot; height=&quot;370&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Windows&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1444&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8dISP/btsN6Y1e59p/E2AX0dbi46LjdCfgq4ik3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8dISP/btsN6Y1e59p/E2AX0dbi46LjdCfgq4ik3k/img.png&quot; data-alt=&quot;Mac&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8dISP/btsN6Y1e59p/E2AX0dbi46LjdCfgq4ik3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8dISP%2FbtsN6Y1e59p%2FE2AX0dbi46LjdCfgq4ik3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;742&quot; height=&quot;407&quot; data-origin-width=&quot;1444&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Mac&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;3. 해당 폴더 내에 있는 &lt;b&gt;updater.ini&lt;/b&gt; 파일을 메모장으로 엽니다.&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;4. [Path] 항목 아래에 다음과 같은 설정이 있습니다.&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: center; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RepositoryPath=C:/Users/(User Name)/STM32Cube/Repository/&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 경로를 원하는 위치로 변경합니다.&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: center; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(예제)RepositoryPath=D:/STM32/Repository/ &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pFHZ7/btsN7b65CIO/Y2WXMtaKO4tzvUFUTf4oxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pFHZ7/btsN7b65CIO/Y2WXMtaKO4tzvUFUTf4oxk/img.png&quot; data-alt=&quot;내부 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pFHZ7/btsN7b65CIO/Y2WXMtaKO4tzvUFUTf4oxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpFHZ7%2FbtsN7b65CIO%2FY2WXMtaKO4tzvUFUTf4oxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;214&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내부 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;24&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZFuW5/btsN5RuMpH2/KYK5JpKlb8v8lvb3jioBu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZFuW5/btsN5RuMpH2/KYK5JpKlb8v8lvb3jioBu1/img.png&quot; data-alt=&quot;저는 이렇게 수정 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZFuW5/btsN5RuMpH2/KYK5JpKlb8v8lvb3jioBu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZFuW5%2FbtsN5RuMpH2%2FKYK5JpKlb8v8lvb3jioBu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;403&quot; height=&quot;24&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;24&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;저는 이렇게 수정 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;5. 파일을 저장한 후 STM32CubeMX를 실행합니다. 그러면 설정한 경로로 &lt;b&gt;Repository 경로가 변경된 것을 확인할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpPxiH/btsN7dw4vRB/0HMPWHXobMj9soxQbE3Upk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpPxiH/btsN7dw4vRB/0HMPWHXobMj9soxQbE3Upk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpPxiH/btsN7dw4vRB/0HMPWHXobMj9soxQbE3Upk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpPxiH%2FbtsN7dw4vRB%2F0HMPWHXobMj9soxQbE3Upk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;598&quot; height=&quot;193&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct0Npu/btsN6Y1eqjI/OThffNEs3XOfAK1EC8KnH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct0Npu/btsN6Y1eqjI/OThffNEs3XOfAK1EC8KnH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct0Npu/btsN6Y1eqjI/OThffNEs3XOfAK1EC8KnH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct0Npu%2FbtsN6Y1eqjI%2FOThffNEs3XOfAK1EC8KnH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;990&quot; height=&quot;158&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;float: none; text-align: left; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/365</guid>
      <comments>https://karniff.tistory.com/entry/STM32CubeMX-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B2%BD%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-Changing-the-STM32CubeMX-Repository-Folder-Location#entry365comment</comments>
      <pubDate>Thu, 22 May 2025 10:35:19 +0900</pubDate>
    </item>
    <item>
      <title>[STM32F7] SAI(Serial audio interface) Error flag</title>
      <link>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-Error-flag</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvCNdp/btsN28hoVoe/a27jrDnv8qE1wzliKqxT8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvCNdp/btsN28hoVoe/a27jrDnv8qE1wzliKqxT8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvCNdp/btsN28hoVoe/a27jrDnv8qE1wzliKqxT8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvCNdp%2FbtsN28hoVoe%2Fa27jrDnv8qE1wzliKqxT8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;369&quot; height=&quot;369&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[이전 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1747621232952&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) Specific features&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) SPDIF output[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interfa&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VO3sw/hyYU4WIXTM/ebnmcDA206VAQChKKxXT2k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Qkbeu/hyYVaJpcWy/bLGISG8rB5rJeMPMSaXsMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ms0YC/hyYW6eOFas/llW7YfZpxKeYqeXgjhS5rK/img.png?width=685&amp;amp;height=705&amp;amp;face=0_0_685_705&quot;&gt;&lt;a href=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VO3sw/hyYU4WIXTM/ebnmcDA206VAQChKKxXT2k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Qkbeu/hyYVaJpcWy/bLGISG8rB5rJeMPMSaXsMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ms0YC/hyYW6eOFas/llW7YfZpxKeYqeXgjhS5rK/img.png?width=685&amp;amp;height=705&amp;amp;face=0_0_685_705');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) Specific features&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) SPDIF output[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interfa&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;Error flag&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;444&quot; data-start=&quot;417&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SAI에서 통신 신뢰성을 확보하기 위해선 다양한 오류 상황을 미리 감지할 수 있어야 합니다.&lt;/b&gt; SAI는 다음과 같은 오류 플래그들을 제공합니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;905&quot; data-start=&quot;446&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;538&quot; data-start=&quot;446&quot;&gt;&lt;b&gt;FIFO 오버런/언더런(Overrun/Underrun)&lt;/b&gt;: FIFO에 데이터가 넘치거나 비어 있는 상태에서 데이터 전송 또는 수신이 시도될 경우 발생합니다.&lt;/li&gt;
&lt;li data-end=&quot;632&quot; data-start=&quot;539&quot;&gt;&lt;b&gt;프레임 동기화 신호 조기 감지 (Anticipated Frame Sync Detection)&lt;/b&gt;: 동기화 신호가 예상보다 빨리 도착했을 때 발생하는 오류입니다.&lt;/li&gt;
&lt;li data-end=&quot;714&quot; data-start=&quot;633&quot;&gt;&lt;b&gt;프레임 동기화 신호 지연 감지 (Late Frame Sync Detection)&lt;/b&gt;: 동기화 신호가 늦게 도착했을 때 발생하는 오류입니다.&lt;/li&gt;
&lt;li data-end=&quot;802&quot; data-start=&quot;715&quot;&gt;&lt;b&gt;코덱 준비 안 됨 (Codec Not Ready)&lt;/b&gt;: AC&amp;rsquo;97 프로토콜 전용으로, 코덱이 준비되지 않은 상태에서 프레임이 시작된 경우 발생합니다.&lt;/li&gt;
&lt;li data-end=&quot;905&quot; data-start=&quot;803&quot;&gt;&lt;b&gt;마스터 모드에서의 잘못된 클럭 구성 (Wrong Clock Configuration in Master Mode)&lt;/b&gt;: 마스터 모드일 때 잘못된 클럭 설정이 감지되면 발생합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;220&quot; data-end=&quot;248&quot;&gt;&lt;b&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt; FIFO 오버런/언더런&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;FIFO 오버런/언더런 상태는 SAI_xSR 레지스터의 &lt;b&gt;OVRUDR&lt;/b&gt; 비트를 통해 표시됩니다.&lt;br /&gt;이 비트는 &lt;b&gt;수신 데이터가 덮어쓰이거나(오버런)&lt;/b&gt;, &lt;b&gt;송신 데이터가 없을 때(언더런)&lt;/b&gt; 발생하는 상황 모두를 감지합니다. SAI의 각 오디오 블록은 자체적인 SAI_xSR 레지스터를 가지고 있어 각각 독립적으로 이 비트를 사용합니다. 즉, 송신기/수신기 구분 없이 이 비트를 통해 FIFO 오류를 실시간으로 확인할 수 있으며, 오류 발생 시 인터럽트나 예외 처리를 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background: #F9F7F6; border-left: 0.5em solid #688FF4; padding: 0.5em; font-weight: bold;&quot;&gt;Overrun&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1121&quot; data-start=&quot;993&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;318&quot; data-start=&quot;215&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SAI가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;수신기 모드&lt;/b&gt;일 때, FIFO가 가득 찬 상태에서 새로운 데이터가 수신되면&lt;b&gt;OVRUDR 오류(Overrun)가 발생하며 데이터는 폐기&lt;/b&gt;됩니다. 이후 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;SAI_xSR 레지스터의 &lt;/span&gt;&lt;b&gt;OVRUDR 플래그&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;가 설정되며, &lt;/span&gt;SAI_xIM 레지스터의 &lt;b&gt;OVRUDRIE 비트&lt;/b&gt;가 설정되어 있다면, &lt;b&gt;인터럽트가 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;318&quot; data-start=&quot;215&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;575&quot; data-start=&quot;452&quot; data-ke-size=&quot;size16&quot;&gt;Overrun이 발생한 슬롯 번호(slot number)는 &lt;b&gt;내부적으로 저장&lt;/b&gt;됩니다. &lt;b&gt;FIFO가 비워져 새로운 데이터를 저장할 수 있을 때까지&lt;/b&gt;, &lt;b&gt;추가 데이터는 FIFO에 저장되지 않습니다. &lt;/b&gt;FIFO가 &lt;b&gt;최소한 하나 이상의 빈 공간&lt;/b&gt;을 갖게 되면, SAI 수신기는 &lt;b&gt;새로운 오디오 프레임&lt;/b&gt;의 데이터를, &lt;b&gt;Overrun이 발생했던 슬롯 번호부터 다시 수신&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;759&quot; data-start=&quot;686&quot; data-ke-size=&quot;size16&quot;&gt;이 메커니즘은 대상 메모리에서의 슬롯 오프셋 불일치(dealignment)를 방지합니다. OVRUDR 플래그는 SAI_xCLRFR 레지스터의 &lt;b&gt;COVRUDR 비트&lt;/b&gt;를 클리어 해야합니다.&lt;/p&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xa6tM/btsN27JwZzw/OUyBsxWZT1IiBUYjRoZ0j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xa6tM/btsN27JwZzw/OUyBsxWZT1IiBUYjRoZ0j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xa6tM/btsN27JwZzw/OUyBsxWZT1IiBUYjRoZ0j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxa6tM%2FbtsN27JwZzw%2FOUyBsxWZT1IiBUYjRoZ0j1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;684&quot; height=&quot;348&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background: #F9F7F6; border-left: 0.5em solid #688FF4; padding: 0.5em; font-weight: bold;&quot;&gt;Underrun&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;993&quot; data-end=&quot;1121&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-start=&quot;495&quot; data-end=&quot;704&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SAI 송신기에서 FIFO가 비어 있는 상태로 데이터 전송 타이밍이 도래하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;언더런 오류가 발생&lt;/b&gt;합니다. 언더런이 감지되면 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;해당 슬롯 위치는 내부적으로 저장되며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;실제 데이터가 준비되기 전까지는 MUTE 값(0)이 전송&lt;/b&gt;됩니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-end=&quot;496&quot; data-start=&quot;423&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 메커니즘은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;메모리 포인터와 슬롯 위치 간의 정렬 오류를 방지&lt;/b&gt;하며, 이벤트 발생 시 SAI_xSR 레지스터의 &lt;b&gt;OVRUDR 플래그&lt;/b&gt;가 설정되고, SAI_xIM 레지스터의 &lt;b&gt;OVRUDRIE 비트&lt;/b&gt;가 설정되어 있다면 &lt;b&gt;인터럽트가 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;496&quot; data-start=&quot;423&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;672&quot; data-start=&quot;611&quot; data-ke-size=&quot;size16&quot;&gt;이 플래그를 클리어하려면, SAI_xCLRFR 레지스터의 &lt;b&gt;COVRUDR 비트&lt;/b&gt;를 설정해야 합니다. 언더런 이벤트는 &lt;b&gt;오디오 서브블록이 마스터이든 슬레이브이든 모두 발생할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ILjvg/btsN2rWggrs/cSDKcVT9TU2FnO4NkmZv7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ILjvg/btsN2rWggrs/cSDKcVT9TU2FnO4NkmZv7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ILjvg/btsN2rWggrs/cSDKcVT9TU2FnO4NkmZv7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FILjvg%2FbtsN2rWggrs%2FcSDKcVT9TU2FnO4NkmZv7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;687&quot; height=&quot;349&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt; 프레임 동기화 신호 조기 감지 (Anticipated Frame Sync Detection)&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;225&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;225&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AFSDET(예상보다 이른 프레임 동기화 검출) 플래그는 슬레이브 모드에서만 사용됩니다. &lt;/b&gt;마스터 모드에서는 &lt;b&gt;절대 활성화되지 않습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-start=&quot;1144&quot; data-end=&quot;1270&quot; data-ke-size=&quot;size16&quot;&gt;SAI의 슬레이브 모드에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;AFSDET 플래그는 예상보다 빠른 프레임 동기화(FS) 감지를 의미&lt;/b&gt;합니다. 이 감지는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;오디오 전송 흐름을 방해하지 않고&lt;/b&gt;, 단지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;비정상적인 FS 타이밍을 감시하는 용도&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;하드웨어 노이즈나 외부 마스터의 타이밍 오류로 인해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;일찍 발생한 FS 신호&lt;/b&gt;가 있을 경우, &lt;b&gt;AFSDET 플래그가 활성화되며&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;, 시스템은 이를 토대로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;정렬 오류 또는 통신 안정성을 분석&lt;/b&gt;할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;287&quot; data-start=&quot;205&quot; data-ke-size=&quot;size16&quot;&gt;SAI_xIM 레지스터에서 &lt;b&gt;AFSDETIE 비트가 설정되어 있을 경우&lt;/b&gt;, &lt;b&gt;AFSDET 플래그가 활성화되면 인터럽트가 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;362&quot; data-start=&quot;289&quot; data-ke-size=&quot;size16&quot;&gt;AFSDET 플래그를 클리어하려면, SAI_xCLRFR 레지스터의 &lt;b&gt;CAFSDET 비트&lt;/b&gt;를 &lt;b&gt;1로 설정&lt;/b&gt;해야 합니다. 예상보다 빠른 프레임 동기화(FS) 오류 발생 후, 마스터와 다시 동기화(resync)하려면 다음과 같은 4단계 절차가 필요합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;761&quot; data-start=&quot;445&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;558&quot; data-start=&quot;445&quot;&gt;SAI_xCR1의 &lt;b&gt;SAIEN 비트를 0으로 설정&lt;/b&gt;하여 &lt;b&gt;SAI 블록을 비활성화&lt;/b&gt;합니다.&lt;br /&gt;- SAI가 실제로 꺼졌는지 확인하려면 SAIEN 비트를 다시 읽어서 0인지 확인&lt;/li&gt;
&lt;li data-end=&quot;626&quot; data-start=&quot;560&quot;&gt;SAI_xCR2 레지스터의 &lt;b&gt;FFLUSH 비트를 1로 설정&lt;/b&gt;하여 &lt;b&gt;FIFO를 초기화(플러시)&lt;/b&gt; 합니다.&lt;/li&gt;
&lt;li data-end=&quot;675&quot; data-start=&quot;628&quot;&gt;SAIEN 비트를 &lt;b&gt;다시 1로 설정&lt;/b&gt;하여 SAI를 &lt;b&gt;재활성화&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;761&quot; data-start=&quot;677&quot;&gt;SAI 블록은 FS 신호의 assertion(하이 레벨 전환)을 대기하며, 이를 통해 &lt;b&gt;마스터와의 동기화가 다시 시작&lt;/b&gt;됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 방식은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;데이터 정렬 손상 없이 통신 상태를 안정적으로 회복&lt;/b&gt;할 수 있는 중요한 메커니즘입니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;244&quot; data-start=&quot;130&quot; data-ke-style=&quot;style2&quot;&gt;&amp;lt;참조&amp;gt;&lt;br /&gt;AFSDET 플래그는 AC&amp;rsquo;97 모드에서는 설정되지 않습니다.&lt;br /&gt;그 이유는 SAI 오디오 블록이 슬레이브로 선언되어 있더라도 링크 컨트롤러 역할을 수행하며 FS 신호를 생성하기 때문입니다.&lt;br /&gt;또한, SPDIF 모드에서는 FS 신호 자체를 사용하지 않기 때문에 AFSDET는 의미가 없습니다.&lt;/blockquote&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;220&quot; data-end=&quot;248&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt; 프레임 동기화 신호 지연 감지 (Late Frame Sync Detection)&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;306&quot; data-start=&quot;232&quot; data-ke-size=&quot;size16&quot;&gt;SAI_xSR 레지스터의 &lt;b&gt;LFSDET 플래그&lt;/b&gt;는 &lt;b&gt;SAI 오디오 블록이 슬레이브로 동작할 때만 설정될 수 있습니다. &lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;306&quot; data-start=&quot;232&quot; data-ke-size=&quot;size16&quot;&gt;프레임 길이(Frame Length), 프레임 극성(Frame Polarity), 프레임 오프셋(Frame Offset)는 SAI_xFRCR 레지스터에 정의되어 있어야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;306&quot; data-start=&quot;232&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;544&quot; data-start=&quot;412&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;외부 마스터가 FS(Frame Sync) 신호를 제 시간에 보내지 않고 지연된 경우&lt;/b&gt;, &lt;b&gt;LFSDET 플래그가 설정&lt;/b&gt;되며, SAI_xIM 레지스터의 &lt;b&gt;LFSDETIE 비트가 설정되어 있다면 인터럽트가 발생&lt;/b&gt;합니다. 이 플래그를 클리어하려면 SAI_xCLRFR 레지스터의 &lt;b&gt;CLFSDET 비트&lt;/b&gt;를 설정해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;708&quot; data-start=&quot;606&quot; data-ke-size=&quot;size16&quot;&gt;해당 오류가 감지되면 &lt;b&gt;LFSDET 플래그가 설정&lt;/b&gt;되며, &lt;b&gt;SAI는 마스터와 다시 동기화되어야 합니다.&lt;/b&gt;&lt;br /&gt;(※ 재동기화 절차는 &lt;b&gt;프레임 동기화 신호 조기 감지 처리 시퀀스&lt;/b&gt;와 동일함)&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;261&quot; data-start=&quot;129&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;노이즈 환경에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;클럭 신호(SCK)의 글리치로 인해 &lt;/b&gt;SAI의 상태 머신이 오디오 프레임 타이밍을 잘못 해석할 수 있습니다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 경우,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;데이터가 잘못된 위치에 시프트&lt;/b&gt;되며 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SAI는 이를 감지해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;LFSDET(Late Frame Sync) 플래그를 설정&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;474&quot; data-start=&quot;330&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;단, 외부 마스터가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;프레임을 비연속 모드로 송신하는 경우에는 데이터 손상 없이 플래그만 감지&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;1372&quot; data-start=&quot;1311&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1372&quot; data-start=&quot;1313&quot; data-ke-size=&quot;size16&quot;&gt;AC&amp;rsquo;97이나 SPDIF 모드에서는 FS 신호 구조상 이 플래그가 &lt;b&gt;의미를 가지지 않으며 무시됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;요약하면 이 오류는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;외부 마스터의 타이밍 불일치 또는 하드웨어 신호 지연&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등에 의해 발생할 수 있으며, &lt;/span&gt;&lt;b&gt;신뢰성 있는 오디오 프레임 정렬을 유지하기 위한 중요한 오류 감지 수단&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt; 코덱 준비 안 됨 (Codec Not Ready) &lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;237&quot; data-start=&quot;128&quot; data-ke-size=&quot;size16&quot;&gt;SAI_xSR 레지스터의 &lt;b&gt;CNRDY 플래그&lt;/b&gt;는 SAI 오디오 블록이 &lt;b&gt;AC'97 모드&lt;/b&gt;로 설정되었을 때만 유효합니다 (SAI_xCR1의 PRTCFG[1:0] = 10). SAI_xIM 레지스터의 &lt;b&gt;CNRDYIE 비트&lt;/b&gt;가 설정되어 있다면, &lt;b&gt;CNRDY 플래그가 활성화될 때 인터럽트가 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;411&quot; data-start=&quot;319&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;411&quot; data-start=&quot;319&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CNRDY 플래그는&lt;/b&gt;, AC'97 오디오 프레임의 &lt;b&gt;TAG 0 (slot 0)&lt;/b&gt; 수신 시점에 &lt;b&gt;코덱이 통신 준비가 되지 않은 경우에 설정됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;418&quot; data-start=&quot;413&quot; data-ke-size=&quot;size16&quot;&gt;이 경우 &lt;b&gt;코덱이 준비될 때까지&lt;/b&gt; 데이터는 &lt;b&gt;FIFO에 자동 저장되지 않으며, &lt;/b&gt;&lt;b&gt;TAG 0이 코덱이 준비되었음을 표시하면&lt;/b&gt;, SAI_xSLOTR에 정의된 &lt;b&gt;모든 활성 슬롯의 데이터 수신이 시작됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;608&quot; data-start=&quot;548&quot; data-ke-size=&quot;size16&quot;&gt;이 플래그를 클리어하려면, SAI_xCLRFR 레지스터의 &lt;b&gt;CCNRDY 비트&lt;/b&gt;를 직접 설정해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CNRDY 인터럽트는 AC'97 초기화 지연, 전원 문제, 통신 불일치 진단에 유용&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;마스터 모드에서의 잘못된 클럭 구성 (with NODIV = 0)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;266&quot; data-start=&quot;145&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;266&quot; data-start=&quot;145&quot; data-ke-size=&quot;size16&quot;&gt;오디오 블록이 &lt;b&gt;마스터 모드로 동작 중&lt;/b&gt;(MODE[1] = 0)이고, NODIV 비트가 &lt;b&gt;0으로 설정된 경우 &lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;프레임 길이 설정값(FRL + 1)이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;2의 제곱수가 아니거나 8~256 범위를 벗어나면&lt;/b&gt; WCKCFG 플래그가 설정되고 SAI는 자동으로 비활성화됩니다.&lt;/p&gt;
&lt;p data-end=&quot;266&quot; data-start=&quot;145&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;512&quot; data-start=&quot;447&quot; data-ke-size=&quot;size16&quot;&gt;WCKCFGIE 비트가 설정되어 있다면,&lt;b&gt;WCKCFG 플래그가 설정될 때 인터럽트가 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;575&quot; data-start=&quot;514&quot; data-ke-size=&quot;size16&quot;&gt;이 플래그를 클리어하려면, SAI_xCLRFR 레지스터의 &lt;b&gt;CWCKCFG 비트&lt;/b&gt;를 설정해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;649&quot; data-start=&quot;577&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;WCKCFG 플래그가 설정되면&lt;/b&gt;, &lt;b&gt;SAIEN 비트는 하드웨어적으로 자동 클리어되며, 오디오 블록은 비활성화됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1292&quot; data-start=&quot;1220&quot; data-ke-size=&quot;size16&quot;&gt;이 오류는 &lt;b&gt;워드 클럭 구성 자체가 잘못되었음을 의미&lt;/b&gt;하며, 인터럽트 발생 후 &lt;b&gt;설정을 수정한 뒤 재시작&lt;/b&gt;해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;1292&quot; data-start=&quot;1220&quot; data-ke-size=&quot;size16&quot;&gt;안정적인 오디오 전송을 위한 필수적인 하드웨어 오류 감지 장치입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;SAI 비활성화&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;180&quot; data-start=&quot;111&quot; data-ke-size=&quot;size16&quot;&gt;SAI 오디오 블록은 SAI_xCR1 레지스터의 &lt;b&gt;SAIEN 비트를 클리어함으로써 언제든지 비활성화&lt;/b&gt;할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;238&quot; data-start=&quot;182&quot; data-ke-size=&quot;size16&quot;&gt;하지만, &lt;b&gt;이미 시작된 오디오 프레임 전송은 자동으로 완료된 후&lt;/b&gt;에 SAI 동작이 중지됩니다.&lt;/p&gt;
&lt;p data-end=&quot;238&quot; data-start=&quot;182&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;이때 SAIEN 비트는 &lt;/span&gt;&lt;b&gt;현재 오디오 프레임 전송이 끝날 때까지 high(1) 상태를 유지&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;하다가 &lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;전송이 완전히 종료되면&amp;nbsp;&lt;/span&gt;&lt;b&gt;자동으로 low(0)로 클리어&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;238&quot; data-start=&quot;182&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;또한,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;동기화 모드로 구성된 SAI에서는 반드시 마스터 블록을 먼저 비활성화&lt;/b&gt;해야&lt;br /&gt;클럭 오류나 비정상 종료를 방지할 수 있습니다.&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;SAI DMA 인터페이스&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;238&quot; data-start=&quot;182&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;258&quot; data-start=&quot;131&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CPU 부하를 줄이고 버스 대역폭을 최적화&lt;/b&gt;하기 위해, 각 SAI 오디오 블록은 &lt;b&gt;독립적인 DMA 인터페이스&lt;/b&gt;를 갖추고 있어 SAI_xDR 레지스터를 통해 내부 FIFO로부터 데이터를 읽거나 쓸 수 있습니다. 각 오디오 서브블록(audio subblock)당 &lt;b&gt;하나의 DMA 채널이 할당&lt;/b&gt;되며, 기본적인 DMA 요청/응답 프로토콜(request/acknowledge)을 지원합니다.&lt;/p&gt;
&lt;p data-end=&quot;443&quot; data-start=&quot;366&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;443&quot; data-start=&quot;366&quot; data-ke-size=&quot;size16&quot;&gt;SAI 오디오 서브블록을 &lt;b&gt;DMA 전송용으로 설정하려면&lt;/b&gt;, SAI_xCR1 레지스터의 &lt;b&gt;DMAEN 비트를 설정&lt;/b&gt;해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;535&quot; data-start=&quot;445&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;DMA 요청은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;FIFO 임계치를 기준으로 자동으로 발생&lt;/b&gt;하며, DMA 전송 방향은 SAI 오디오 서브블록의 구성(송신/수신)에 따라 달라집니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;330&quot; data-start=&quot;140&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;245&quot; data-start=&quot;140&quot;&gt;오디오 블록이 **송신기(Tx)**로 동작할 경우,&lt;br /&gt;- 오디오 블록의 &lt;b&gt;FIFO 컨트롤러는 SAI_xDR에 기록된 데이터를 FIFO에 적재하기 위해 DMA 요청&lt;/b&gt;을 발생시킵니다.&lt;/li&gt;
&lt;li data-end=&quot;330&quot; data-start=&quot;247&quot;&gt;오디오 블록이 **수신기(Rx)**로 동작할 경우,&lt;br /&gt;&lt;b&gt;- SAI_xDR 레지스터로부터 데이터를 읽어들이기 위해 DMA 요청&lt;/b&gt;이 발생합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;383&quot; data-start=&quot;337&quot; data-ke-size=&quot;size16&quot;&gt;DMA 모드에서 SAI 인터페이스를 설정하려면 다음 순서를 따릅니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;532&quot; data-start=&quot;385&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;451&quot; data-start=&quot;385&quot;&gt;&lt;b&gt;SAI 및 FIFO 임계값(FIFO Threshold)을 설정하여&lt;/b&gt; DMA 요청 발생 시점을 정의합니다.&lt;/li&gt;
&lt;li data-end=&quot;484&quot; data-start=&quot;452&quot;&gt;&lt;b&gt;SAI에 연결된 DMA 채널을 구성&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;506&quot; data-start=&quot;485&quot;&gt;&lt;b&gt;DMA를 활성화&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;532&quot; data-start=&quot;507&quot;&gt;&lt;b&gt;SAI 인터페이스를 활성화&lt;/b&gt;합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구조는 &lt;b&gt;고속 오디오 처리에 필수적이며, CPU 부하를 획기적으로 줄일 수 있는 방법&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/364</guid>
      <comments>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-Error-flag#entry364comment</comments>
      <pubDate>Mon, 19 May 2025 12:07:04 +0900</pubDate>
    </item>
    <item>
      <title>[STM32F7] SAI(Serial audio interface) Specific features</title>
      <link>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ySwjC/btsN3woLwOI/XxMogKF5UpE9cKcRjr1pTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ySwjC/btsN3woLwOI/XxMogKF5UpE9cKcRjr1pTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ySwjC/btsN3woLwOI/XxMogKF5UpE9cKcRjr1pTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FySwjC%2FbtsN3woLwOI%2FXxMogKF5UpE9cKcRjr1pTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;451&quot; height=&quot;451&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[이전 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747617885942&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) SPDIF output&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio int&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qiJkV/hyYU2YO8Sz/K8nVHZaU0ccwoiTxh0OB9k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424,https://scrap.kakaocdn.net/dn/baLk3T/hyYU7TlCyW/pKkaRu4ktQP3x4SgtAyg8k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424,https://scrap.kakaocdn.net/dn/pVIK3/hyYVgirmgX/UvXuoVmgXyUndjEs3BEc5k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qiJkV/hyYU2YO8Sz/K8nVHZaU0ccwoiTxh0OB9k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424,https://scrap.kakaocdn.net/dn/baLk3T/hyYU7TlCyW/pKkaRu4ktQP3x4SgtAyg8k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424,https://scrap.kakaocdn.net/dn/pVIK3/hyYVgirmgX/UvXuoVmgXyUndjEs3BEc5k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) SPDIF output&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio int&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;Specific features &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SAI 인터페이스에는 선택한 오디오 프로토콜에 따라 유용할 수 있는 고유 기능들이 포함되어 있습니다. 이러한 기능들은 SAI_xCR2 레지스터의 특정 비트를 통해 접근할 수 있습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;220&quot; data-end=&quot;248&quot;&gt;&lt;b&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;Mute 모드&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1121&quot; data-start=&quot;993&quot; data-ke-size=&quot;size16&quot;&gt;Mute 모드는 오디오 서브블록이 송신기이거나 수신기일 때 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;1121&quot; data-start=&quot;993&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background: #F9F7F6; border-left: 0.5em solid #688FF4; padding: 0.5em; font-weight: bold;&quot;&gt;오디오 서브 블록이 송신 모드인 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1121&quot; data-start=&quot;993&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1121&quot; data-start=&quot;993&quot; data-ke-size=&quot;size16&quot;&gt;송신 모드에서 Mute 모드는 언제든지 선택할 수 있으며, 전체 오디오 프레임 단위로 활성화됩니다. 진행 중인 프레임 도중 SAI_xCR2 레지스터의 MUTE 비트를 설정하면 Mute 모드가 활성화됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1284&quot; data-start=&quot;1106&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프레임 단위로 Mute가 적용&lt;/b&gt;되므로 실시간 오디오 전송 중간에 Mute를 설정하더라도, 현재 프레임이 끝나야 다음 프레임부터 적용됩니다. SAI_xSLOTR 레지스터의 NBSLOT[3:0] 비트를 통해 설정된 &lt;b&gt;슬롯 수가 2 이하&lt;/b&gt;인 경우, Mute 모드에서 송신되는 값으로 &lt;b&gt;0을 보낼지, 이전 슬롯의 마지막 값을 보낼지&lt;/b&gt;를 선택할 수 있습니다. 이 선택은 SAI_xCR2 레지스터의 MUTEVAL 비트를 통해 결정합니다.&lt;/p&gt;
&lt;p data-end=&quot;1542&quot; data-start=&quot;1460&quot; data-ke-size=&quot;size16&quot;&gt;반면 &lt;b&gt;슬롯 수가 2보다 클 경우&lt;/b&gt;, 모든 슬롯의 모든 비트에 0이 송신되며, 이때 MUTEVAL 비트는 &lt;b&gt;의미를 가지지 않게 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1633&quot; data-start=&quot;1544&quot; data-ke-size=&quot;size16&quot;&gt;Mute 모드 동안에도 FIFO 포인터가 계속 증가하기 때문에, &lt;b&gt;Mute 도중에도 FIFO는 소모됨&lt;/b&gt;. 오디오 드롭이나 지연 없이 Mute 처리가 가능하다는 의미지만, 반대로 Mute 시 데이터가 실제로 &lt;b&gt;전송되지 않더라도 FIFO가 비워지므로&lt;/b&gt; 유의해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background: #F9F7F6; border-left: 0.5em solid #688FF4; padding: 0.5em; font-weight: bold;&quot;&gt;오디오 서브 블록이 수신 모드인 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;993&quot; data-end=&quot;1121&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;227&quot; data-start=&quot;168&quot; data-ke-size=&quot;size16&quot;&gt;외부 송신기가 연속된 Mute 프레임을 보낼 경우 이를 자동으로 감지할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;227&quot; data-start=&quot;168&quot; data-ke-size=&quot;size16&quot;&gt;이 감지는 &lt;b&gt;오디오 프레임의 모든 선언된(valid) 슬롯이 0을 수신했을 때&lt;/b&gt;, &lt;b&gt;연속된 프레임 수가 SAI_xCR2 레지스터의 MUTECNT[5:0] 비트&lt;/b&gt;로 설정된 값에 도달하면 동작합니다. Mute 프레임의 개수가 설정된 값을 만족하면, &lt;b&gt;SAI_xSR 레지스터의 MUTEDET 플래그가 설정되며&lt;/b&gt;, SAI_xCR2 레지스터의 MUTEDETIE 비트가 활성화되어 있을 경우, &lt;b&gt;인터럽트가 발생&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;508&quot; data-start=&quot;481&quot; data-ke-size=&quot;size16&quot;&gt;Mute 카운터는 다음 두 상황에서 초기화됩니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;570&quot; data-start=&quot;510&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;532&quot; data-start=&quot;510&quot;&gt;오디오 서브블록이 비활성화된 경우&lt;/li&gt;
&lt;li data-end=&quot;570&quot; data-start=&quot;533&quot;&gt;유효한 슬롯 중 하나라도 &lt;b&gt;0이 아닌 데이터&lt;/b&gt;를 수신한 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;646&quot; data-start=&quot;572&quot; data-ke-size=&quot;size16&quot;&gt;이 인터럽트는 MUTEDET가 처음 감지될 때 &lt;b&gt;단 한 번만 발생&lt;/b&gt;하며, Mute 카운터가 초기화되면 다시 감지 가능해집니다.&lt;/p&gt;
&lt;blockquote data-start=&quot;696&quot; data-end=&quot;846&quot; data-ke-style=&quot;style2&quot;&gt;SPDIF&amp;nbsp;오디오&amp;nbsp;블록에서는&amp;nbsp;음소거&amp;nbsp;모드를&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;없습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;Mono/Stereo 모드&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;296&quot; data-start=&quot;162&quot; data-ke-size=&quot;size16&quot;&gt;송신기 모드(Transmitter mode)에서는, &lt;b&gt;슬롯 수가 2개일 때&lt;/b&gt;(SAI_xSLOTR의 NBSLOT[3:0] = 0001) 메모리에서 &lt;b&gt;데이터 전처리 없이&lt;/b&gt; &lt;b&gt;Mono 모드&lt;/b&gt;를 사용할 수 있습니다. 이 경우, &lt;b&gt;FIFO로부터의 접근 시간이 절반으로 줄어듭니다&lt;/b&gt;, 왜냐하면 &lt;b&gt;슬롯 0의 데이터가 슬롯 1에도 자동 복제되어&lt;/b&gt; 전송되기 때문입니다. Mono 모드를 활성화하려면 다음 단계를 따릅니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;530&quot; data-start=&quot;416&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;460&quot; data-start=&quot;416&quot;&gt;SAI_xCR1 레지스터의 &lt;b&gt;MONO 비트를 1로 설정&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;530&quot; data-start=&quot;461&quot;&gt;SAI_xSLOTR에서 &lt;b&gt;NBSLOT을 1로 설정&lt;/b&gt;, 그리고 SLOTEN을 3(0b11)으로 설정합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;732&quot; data-start=&quot;537&quot; data-ke-size=&quot;size16&quot;&gt;수신기 모드(Receiver mode)에서도 MONO 비트를 설정할 수 있으며, 이 비트는 &lt;b&gt;슬롯 수가 2개일 때만 유효&lt;/b&gt;합니다. 이 비트를 설정하면, &lt;b&gt;슬롯 0의 데이터만 FIFO에 저장되고&lt;/b&gt;, &lt;b&gt;슬롯 1의 데이터는 폐기됩니다&lt;/b&gt;, 왜냐하면 이 경우, 슬롯 1은 슬롯 0과 동일한 데이터일 것으로 간주되기 때문입니다. 만약 수신 데이터가 &lt;b&gt;진짜 스테레오&lt;/b&gt; (좌우 채널이 다름)인 경우, MONO 비트는 의미가 없으며, &lt;b&gt;스테레오 &amp;rarr; 모노 변환은 소프트웨어에서 처리해야&lt;/b&gt; 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;220&quot; data-end=&quot;248&quot;&gt;&lt;b&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt; Companding 모드(압축 모드)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;통신(Telecommunication) 애플리케이션에서는 전송 또는 수신되는 데이터를 &lt;b&gt;컴팬딩(Companding) 알고리즘&lt;/b&gt;을 통해 처리해야 할 수 있습니다. Companding(Compression + Expanding)는 아날로그 오디오 또는 음성 데이터를 &lt;b&gt;동적 범위를 줄여&lt;/b&gt; 디지털화할 때 자주 사용하는 방식입니다. 이 기능을 사용하면, 오디오 데이터를 전송 전에 압축하거나 수신 후 복원할 수 있어&lt;br /&gt;&lt;b&gt;통신 대역폭을 줄이면서 음성 품질을 유지&lt;/b&gt;할 수 있습니다. 단, &lt;b&gt;Free Protocol Mode에서만 사용 가능&lt;/b&gt;하므로, I2S 같은 고정 포맷에서는 동작하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;529&quot; data-start=&quot;324&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Free Protocol Mode&lt;/b&gt;가 선택된 경우, SAI_xCR2 레지스터의 COMP[1:0] 비트를 설정함으로써 응용 소프트웨어는 데이터를 SD 직렬 출력 라인으로 전송하기 전에 압축(compression)하거나, SD 직렬 입력 라인으로 수신한 후 확장(expansion)할지를 선택할 수 있습니다. 지원되는 두 가지 컴팬딩 모드는 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;602&quot; data-start=&quot;560&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;580&quot; data-start=&quot;560&quot;&gt;&lt;b&gt;&amp;mu;-Law (뮤-로우)&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;602&quot; data-start=&quot;581&quot;&gt;&lt;b&gt;A-Law (에이-로우)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;649&quot; data-start=&quot;604&quot; data-ke-size=&quot;size16&quot;&gt;이 둘은 &lt;b&gt;국제 CCITT G.711 권고안&lt;/b&gt;에 포함된 로그 압축 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;180&quot; data-ke-size=&quot;size16&quot;&gt;미국과 일본에서 사용하는 컴팬딩(Companding) 표준은 &lt;b&gt;&amp;micro;-Law&lt;/b&gt;입니다. 이 방식은 14비트의 다이내믹 레인지(dynamic range)를 지원하며, SAI_xCR2 레지스터에서 COMP[1:0] = 10으로 설정합니다.&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;180&quot; data-ke-size=&quot;size16&quot;&gt;유럽에서 사용하는 컴팬딩 표준은 &lt;b&gt;A-Law&lt;/b&gt;이며, 이 방식은 &lt;b&gt;13비트의 다이내믹 레인지&lt;/b&gt;를 지원합니다. A-Law는 COMP[1:0] = 11로 설정합니다.&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;micro;-Law 및 A-Law 방식 모두에서 데이터는 &lt;b&gt;1의 보수(1&amp;rsquo;s complement)&lt;/b&gt; 또는 2의 보수(2&amp;rsquo;s complement)로 계산할 수 있으며, 이 방식은 SAI_xCR2의 CPL 비트 설정에 따라 달라집니다. 이 CPL 비트를 통해 1의 보수/2의 보수 표현을 선택할 수 있어 호환성을 유지한 통신이 가능합니다. &amp;micro;-Law와 A-Law에서는 데이터가 항상 &lt;b&gt;8비트 크기이며&lt;/b&gt;, &lt;b&gt;MSB 정렬&lt;/b&gt;됩니다. 즉, 컴팬딩된 데이터는 항상 &lt;b&gt;8비트&lt;/b&gt;로 전송됩니다. 이 때문에, SAI_xCR1 레지스터의 DS[2:0] 비트는 SAIEN 비트가 활성화(=1)되고, COMP[1:0] 비트 중 하나가 설정된 경우 자동으로 010(=8비트)로 강제 설정됩니다.&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;832&quot; data-start=&quot;779&quot; data-ke-size=&quot;size16&quot;&gt;컴팬딩 처리가 필요하지 않은 경우, COMP[1:0] 비트는 &lt;b&gt;0으로 유지&lt;/b&gt;해야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdqU2c/btsN1BZxbQn/MKGKEIla3Z3uULtJx22rc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdqU2c/btsN1BZxbQn/MKGKEIla3Z3uULtJx22rc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdqU2c/btsN1BZxbQn/MKGKEIla3Z3uULtJx22rc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdqU2c%2FbtsN1BZxbQn%2FMKGKEIla3Z3uULtJx22rc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;391&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;272&quot; data-start=&quot;203&quot; data-ke-size=&quot;size16&quot;&gt;압축(Compression) 및 확장(Expansion) 모드는 &lt;b&gt;SAI_xCR2 레지스터를 통해 자동으로 선택&lt;/b&gt;됩니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;474&quot; data-start=&quot;274&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;395&quot; data-start=&quot;274&quot;&gt;SAI 오디오 블록이 송신기(transmitter)로 구성되어 있고, SAI_xCR2의 &lt;b&gt;COMP[1] 비트가 설정&lt;/b&gt;되어 있다면,&lt;br /&gt;&lt;b&gt;Compression(압축) 모드&lt;/b&gt;가 적용됩니다.&lt;/li&gt;
&lt;li data-end=&quot;474&quot; data-start=&quot;397&quot;&gt;SAI 오디오 블록이 수신기(receiver)로 선언되어 있다면, &lt;b&gt;Expansion(확장) 알고리즘&lt;/b&gt;이 적용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1073&quot; data-start=&quot;980&quot; data-ke-size=&quot;size16&quot;&gt;이를 통해 별도의 소프트웨어 처리를 하지 않아도 &lt;b&gt;G.711 기반 음성 통신에 최적화된 데이터 전송이 가능&lt;/b&gt;하며, 오디오 압축 및 복원이 매우 간편해집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;비활성 슬롯 전송 시 SAI 출력 데이터 라인(SD) 관리&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;SAI 송신기 모드에서, 비활성 슬롯 전송 시 SD 출력 라인을 0으로 고정하거나 하이 임피던스로 해제할 수 있습니다. 이 설정은 TRIS 비트를 통해 제어됩니다. 즉,&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;516&quot; data-start=&quot;358&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;407&quot; data-start=&quot;358&quot;&gt;&lt;b&gt;SAI가 SD 출력 라인에 0을 강제로 출력&lt;/b&gt;하거나&lt;/li&gt;
&lt;li data-end=&quot;516&quot; data-start=&quot;408&quot;&gt;&lt;b&gt;마지막 데이터 비트 전송이 끝난 후 SD 라인을 high-Z(하이 임피던스) 상태로 해제&lt;/b&gt;하여, 해당 노드에 연결된 다른 송신기가 라인을 사용할 수 있도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;749&quot; data-start=&quot;628&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;중요한 점은, **두 송신기가 동시에 SD 라인을 구동하려고 하면 단락(short-circuit)**이 발생할 수 있으므로, &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;절대로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;같은 SD 핀을 동시에 구동하면 안 됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;749&quot; data-start=&quot;628&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;송신 간 간격을 확보하기 위해&lt;/b&gt;, 데이터 길이가 32비트보다 짧은 경우, SAI_xSLOTR 레지스터의 SLOTSZ[1:0] = 10으로 설정하여 &lt;b&gt;데이터를 32비트로 확장&lt;/b&gt;할 수 있습니다. 이렇게 설정하면, &lt;b&gt;활성 슬롯(active slot)의 LSB 이후&lt;/b&gt;(0으로 패딩되는 동안), &lt;b&gt;다음 슬롯이 비활성인 경우 SD 라인이 tri-state(high-Z)로 전환&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;p data-end=&quot;749&quot; data-start=&quot;628&quot; data-ke-size=&quot;size16&quot;&gt;또한, &lt;b&gt;(슬롯 수 &amp;times; 슬롯 크기) &amp;lt; 프레임 길이&lt;/b&gt;인 경우, &lt;b&gt;오디오 프레임을 0으로 패딩하여 완성하는 과정 중에도 SD 라인은 tri-state 처리됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caNpaP/btsN1p6c7nr/pNemrs8hAysK09kqsCkJ0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caNpaP/btsN1p6c7nr/pNemrs8hAysK09kqsCkJ0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caNpaP/btsN1p6c7nr/pNemrs8hAysK09kqsCkJ0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaNpaP%2FbtsN1p6c7nr%2FpNemrs8hAysK09kqsCkJ0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;705&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;387&quot; data-start=&quot;251&quot; data-ke-size=&quot;size16&quot;&gt;선택된 오디오 프로토콜이 &lt;b&gt;FS 신호를 프레임 시작 및 채널 측 구분용&lt;/b&gt;으로 사용할 경우 (SAI_xFRCR 레지스터에서 FSDEF = 1), &lt;b&gt;tristate 모드&lt;/b&gt;는 &lt;b&gt;Figure 405&lt;/b&gt;의 조건에 따라 관리됩니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;487&quot; data-start=&quot;389&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;418&quot; data-start=&quot;389&quot;&gt;SAI_xCR1의 TRIS 비트 = 1&lt;/li&gt;
&lt;li data-end=&quot;434&quot; data-start=&quot;419&quot;&gt;FSDEF = 1&lt;/li&gt;
&lt;li data-end=&quot;472&quot; data-start=&quot;435&quot;&gt;&lt;b&gt;Half frame length &amp;gt; 슬롯 개수의 절반&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;487&quot; data-start=&quot;473&quot;&gt;NBSLOT = 6&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;535&quot; data-start=&quot;489&quot; data-ke-size=&quot;size16&quot;&gt;이 조건 하에서, 하이 임피던스 제어는 각 슬롯과 채널 경계에서 적절히 적용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zxTf6/btsN2Op6JIX/zvWfeKXVwzB9dmdZoh2RU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zxTf6/btsN2Op6JIX/zvWfeKXVwzB9dmdZoh2RU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zxTf6/btsN2Op6JIX/zvWfeKXVwzB9dmdZoh2RU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzxTf6%2FbtsN2Op6JIX%2FzvWfeKXVwzB9dmdZoh2RU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683&quot; height=&quot;381&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;만약 SAI_xCR2 레지스터의 TRIS 비트가 클리어(=0)되어 있다면, 위 그림 &lt;b&gt;Figure 404 및 405에서 SD 출력 라인이 high-Z가 되던 모든 부분은 0을 출력하도록 대체됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[다음 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747624061194&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) Error flag&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) Specific features[이전 회차] [STM32F7] SAI(Serial audio interface) SPDIF output[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interf&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-Error-flag&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-Error-flag&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rpLtt/hyYVdF8x7N/w6bS7Bs5wGHgfUZaUgp661/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/snCH5/hyYU8EPRBz/nv2ZCRnQ0nXKPtueKdyXB1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hxhm2/hyYU0Ulvky/EBgU5BdK85kPeiKCxGJu3K/img.png?width=687&amp;amp;height=349&amp;amp;face=0_0_687_349&quot;&gt;&lt;a href=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-Error-flag&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-Error-flag&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rpLtt/hyYVdF8x7N/w6bS7Bs5wGHgfUZaUgp661/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/snCH5/hyYU8EPRBz/nv2ZCRnQ0nXKPtueKdyXB1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hxhm2/hyYU0Ulvky/EBgU5BdK85kPeiKCxGJu3K/img.png?width=687&amp;amp;height=349&amp;amp;face=0_0_687_349');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) Error flag&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) Specific features[이전 회차] [STM32F7] SAI(Serial audio interface) SPDIF output[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interf&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/363</guid>
      <comments>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1#entry363comment</comments>
      <pubDate>Mon, 19 May 2025 11:16:33 +0900</pubDate>
    </item>
    <item>
      <title>[STM32F7] SAI(Serial audio interface) SPDIF output</title>
      <link>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oQjaa/btsN3ftPP2S/newVrDSC9BphSDxMGiZfR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oQjaa/btsN3ftPP2S/newVrDSC9BphSDxMGiZfR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oQjaa/btsN3ftPP2S/newVrDSC9BphSDxMGiZfR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoQjaa%2FbtsN3ftPP2S%2FnewVrDSC9BphSDxMGiZfR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;553&quot; height=&quot;553&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[이전 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747588423157&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) 학습하기 (6)&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio int&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmIdJj/hyYTkeEz5E/BxWU0qH8tvB6Vc2zvpKybK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/VhaGf/hyYU583Gw2/hePRMgaGKptLF3nJhKsff0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/xNkFl/hyYVc1p1DD/XWJaBTeLXY9w1R5h9jplzK/img.png?width=820&amp;amp;height=927&amp;amp;face=0_0_820_927&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmIdJj/hyYTkeEz5E/BxWU0qH8tvB6Vc2zvpKybK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/VhaGf/hyYU583Gw2/hePRMgaGKptLF3nJhKsff0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/xNkFl/hyYVc1p1DD/XWJaBTeLXY9w1R5h9jplzK/img.png?width=820&amp;amp;height=927&amp;amp;face=0_0_820_927');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) 학습하기 (6)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio int&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;SPDIF output &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1121&quot; data-start=&quot;993&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SAI는 SPDIF 출력을 지원합니다.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;SPDIF 인터페이스는 송신기 모드에서만 사용 가능합니다. 이 기능은 오디오 IEC60958 표준을 지원합니다.&lt;br /&gt;SPDIF 모드를 선택하려면, SAI_xCR1 레지스터의 PRTCFG[1:0] 비트를 01로 설정해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;1155&quot; data-start=&quot;1123&quot; data-ke-size=&quot;size16&quot;&gt;SPDIF 프로토콜의 경우 다음과 같은 조건이 적용됩니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1574&quot; data-start=&quot;1157&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1179&quot; data-start=&quot;1157&quot;&gt;SD 데이터 라인만 활성화됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1226&quot; data-start=&quot;1180&quot;&gt;FS, SCK, MCLK 핀은 사용되지 않으며 자유롭게 사용할 수 있습니다.&lt;/li&gt;
&lt;li data-end=&quot;1313&quot; data-start=&quot;1227&quot;&gt;데이터 레이트를 제어하기 위해 SAI의 클록 생성기를 활성화하는 &lt;b&gt;마스터 모드&lt;/b&gt;로 설정되며, 이때 MODE[1] 비트는 강제로 0이 됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1368&quot; data-start=&quot;1314&quot;&gt;데이터 크기는 24비트로 고정되며, SAI_xCR1의 DS[2:0] 설정 값은 무시됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1452&quot; data-start=&quot;1369&quot;&gt;심볼레이트(SPDIF 전송 속도)를 설정하기 위해 클록 생성기를 구성해야 하며, 이때 &lt;b&gt;비트 클록은 심볼레이트의 두 배&lt;/b&gt;가 되어야 합니다.&lt;/li&gt;
&lt;li data-end=&quot;1491&quot; data-start=&quot;1453&quot;&gt;데이터는 맨체스터(Manchester) 방식으로 인코딩됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1574&quot; data-start=&quot;1492&quot;&gt;SAI_xFRCR 및 SAI_xSLOTR 레지스터는 무시되며, SAI는 SPDIF 규격에 맞춰 내부적으로 자동 설정됩니다 (아래 그림 참조).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XCTyz/btsN2Ja66Xv/NaV6FyUmR8TW2ONZxGoxH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XCTyz/btsN2Ja66Xv/NaV6FyUmR8TW2ONZxGoxH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XCTyz/btsN2Ja66Xv/NaV6FyUmR8TW2ONZxGoxH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXCTyz%2FbtsN2Ja66Xv%2FNaV6FyUmR8TW2ONZxGoxH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;766&quot; height=&quot;424&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;424&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;781&quot; data-start=&quot;643&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SPDIF는 디지털 오디오 데이터를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;192프레임 단위 블록&lt;/b&gt;으로 묶어 전송하며, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;각 프레임은 왼쪽/오른쪽 채널용으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;32비트 서브프레임 2개&lt;/b&gt;로 구성됩니다. 각 서브프레임의 첫 4비트 &lt;b&gt;SOPD 패턴은&lt;/b&gt;&amp;nbsp;채널 식별용, 나머지 28비트는 실제&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;24비트 오디오 데이터 +&amp;nbsp; 4비트 상태 정보&lt;/b&gt;로 채워집니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4GDbX/btsN1sPh3qj/b6uL7Lx9tstUucKIpz1kt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4GDbX/btsN1sPh3qj/b6uL7Lx9tstUucKIpz1kt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4GDbX/btsN1sPh3qj/b6uL7Lx9tstUucKIpz1kt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4GDbX%2FbtsN1sPh3qj%2Fb6uL7Lx9tstUucKIpz1kt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;834&quot; height=&quot;244&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;171&quot; data-start=&quot;127&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1271&quot; data-start=&quot;1192&quot; data-ke-size=&quot;size16&quot;&gt;SPDIF 전송 시, STM32의 SAI_xDR 레지스터에 데이터를 저장할 때는 &lt;b&gt;비트별 정렬을 정확히 맞추는 것이 필수적&lt;/b&gt;입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1353&quot; data-start=&quot;1273&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1308&quot; data-start=&quot;1273&quot;&gt;상위 3비트([26:24])에는 SPDIF의 필수 제어 비트인 &lt;b&gt;Validity(V), User(U), Channel Status(CS)&lt;/b&gt; 비트를 저장하고,&lt;/li&gt;
&lt;li data-end=&quot;1353&quot; data-start=&quot;1309&quot;&gt;나머지 하위 24비트([23:0])는 실제 오디오 데이터를 담습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1447&quot; data-start=&quot;1355&quot; data-ke-size=&quot;size16&quot;&gt;만약, 전송하려는 데이터가 &lt;b&gt;16비트 또는 20비트&lt;/b&gt;일 경우, 항상 &lt;b&gt;MSB를 23번 비트에 위치&lt;/b&gt;시키고 나머지 하위 비트는 &lt;b&gt;0으로 채워 정렬&lt;/b&gt;해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XdvJn/btsN22BwT9f/PgrEYiMKZfjONMkRqysKO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XdvJn/btsN22BwT9f/PgrEYiMKZfjONMkRqysKO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XdvJn/btsN22BwT9f/PgrEYiMKZfjONMkRqysKO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXdvJn%2FbtsN22BwT9f%2FPgrEYiMKZfjONMkRqysKO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;829&quot; height=&quot;331&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;331&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-start=&quot;696&quot; data-end=&quot;846&quot; data-ke-style=&quot;style2&quot;&gt;&amp;lt;참고&amp;gt;&lt;br /&gt;전송은 항상 LSB 먼저 전송됩니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;998&quot; data-start=&quot;867&quot; data-ke-size=&quot;size16&quot;&gt;SPDIF 전송 시, SAI는 각 서브프레임마다 먼저 &lt;b&gt;프리앰블을 전송&lt;/b&gt;하고, 그다음 SAI_xDR에 저장된 27비트의 데이터(CUV + 24비트 오디오)를 &lt;b&gt;맨체스터 인코딩 방식으로 SD 라인에 출력&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;1113&quot; data-start=&quot;1000&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, &lt;b&gt;전체 데이터의 패리티를 계산하여 1비트 추가 전송&lt;/b&gt;함으로써 &lt;b&gt;서브프레임을 완성&lt;/b&gt;합니다. 이 패리티는 아래 표의 방식에 따라 계산됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VS1ue/btsN3gM4fjW/A7gch1K2Y8e9o1ujTxgeAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VS1ue/btsN3gM4fjW/A7gch1K2Y8e9o1ujTxgeAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VS1ue/btsN3gM4fjW/A7gch1K2Y8e9o1ujTxgeAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVS1ue%2FbtsN3gM4fjW%2FA7gch1K2Y8e9o1ujTxgeAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;864&quot; height=&quot;154&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;226&quot; data-start=&quot;127&quot; data-ke-size=&quot;size16&quot;&gt;SPDIF 모드에서는 &lt;b&gt;SAI가 송신기 모드에서만 동작&lt;/b&gt;하기 때문에, SAI_xSR 레지스터에 존재하는 유일한 오류 플래그는 언더런(underrun)입니다. 따라서 &lt;b&gt;언더런 인터럽트&lt;/b&gt; 또는 &lt;b&gt;언더런 상태 비트&lt;/b&gt;를 통해 오류가 감지된 경우, 다음과 같은 순서로 복구 절차를 수행해야 합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;856&quot; data-start=&quot;309&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;367&quot; data-start=&quot;309&quot;&gt;&lt;b&gt;DMA를 사용하는 경우&lt;/b&gt;, DMA 스트림을 &lt;b&gt;DMA 주변 장치를 통해 비활성화&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;466&quot; data-start=&quot;368&quot;&gt;&lt;b&gt;SAI를 비활성화&lt;/b&gt;하고, SAI_xCR1 레지스터의 &lt;b&gt;SAIEN 비트가 0이 될 때까지 polling&lt;/b&gt;하여 주변 장치가 실제로 비활성화되었는지 확인합니다.&lt;/li&gt;
&lt;li data-end=&quot;529&quot; data-start=&quot;467&quot;&gt;SAI_xCLRFR 레지스터의 &lt;b&gt;COVRUNDR(underrun 오류) 플래그를 클리어&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;590&quot; data-start=&quot;530&quot;&gt;SAI_xCR2 레지스터의 **FFLUSH 비트를 설정하여 FIFO를 플러시(초기화)**합니다.&lt;/li&gt;
&lt;li data-end=&quot;733&quot; data-start=&quot;591&quot;&gt;소프트웨어는 다음 블록의 시작에 해당하는 &lt;b&gt;새 데이터 주소&lt;/b&gt;를 가리키도록 설정해야 합니다 (즉, &lt;b&gt;프리앰블 B에 해당하는 데이터부터&lt;/b&gt;). DMA를 사용하는 경우, &lt;b&gt;DMA 소스 베이스 주소 포인터도 함께 갱신&lt;/b&gt;해야 합니다.&lt;/li&gt;
&lt;li data-end=&quot;799&quot; data-start=&quot;734&quot;&gt;DMA를 사용하는 경우, &lt;b&gt;DMA 스트림을 다시 활성화&lt;/b&gt;하여 새 주소 기반으로 데이터 전송을 관리합니다.&lt;/li&gt;
&lt;li data-end=&quot;856&quot; data-start=&quot;800&quot;&gt;마지막으로, SAI_xCR1의 &lt;b&gt;SAIEN 비트를 설정하여 SAI를 다시 활성화&lt;/b&gt;합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt; SPDIF 생성기 모드에서의 클럭 설정&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SPDIF 모드에서는 오디오 전송을 위해 &lt;b&gt;심볼레이트보다 2배 빠른 비트 클럭&lt;/b&gt;이 필요합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 표는 **오디오 샘플링 주파수(FS)**에 따른 &lt;b&gt;심볼레이트의 예시&lt;/b&gt;를 보여줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;848&quot; data-end=&quot;920&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7oeBK/btsN1sIvkxj/FQw7DcepCYOdoFSfEILkcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7oeBK/btsN1sIvkxj/FQw7DcepCYOdoFSfEILkcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7oeBK/btsN1sIvkxj/FQw7DcepCYOdoFSfEILkcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7oeBK%2FbtsN1sIvkxj%2FFQw7DcepCYOdoFSfEILkcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;829&quot; height=&quot;220&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;848&quot; data-end=&quot;920&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;848&quot; data-end=&quot;920&quot;&gt;좀 더 일반적으로, 오디오 샘플링 주파수(FS)와 비트 클럭(F_SCK_X) 사이의 관계는 다음 공식으로 주어집니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;196&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beBctc/btsN1TrZf0T/NknA25nKoBewAqp3KJGJ71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beBctc/btsN1TrZf0T/NknA25nKoBewAqp3KJGJ71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beBctc/btsN1TrZf0T/NknA25nKoBewAqp3KJGJ71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeBctc%2FbtsN1TrZf0T%2FNknA25nKoBewAqp3KJGJ71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;196&quot; height=&quot;64&quot; data-origin-width=&quot;196&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;비트 클럭(F_SCK_X)은 다음과 같이 구해집니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIyLbx/btsN1TS5Aup/yd3OdikdnKMtX41aAk6Pik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIyLbx/btsN1TS5Aup/yd3OdikdnKMtX41aAk6Pik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIyLbx/btsN1TS5Aup/yd3OdikdnKMtX41aAk6Pik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIyLbx%2FbtsN1TS5Aup%2Fyd3OdikdnKMtX41aAk6Pik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;277&quot; height=&quot;61&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;696&quot; data-end=&quot;846&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&amp;lt;참고&amp;gt;&lt;br /&gt;위의 공식은 SAI_ACR1 레지스터에서 NODIV 비트가 1로 설정되어 있어야 유효합니다.&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[다음 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747621098354&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) Specific features&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) SPDIF output[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interfa&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VO3sw/hyYU4WIXTM/ebnmcDA206VAQChKKxXT2k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Qkbeu/hyYVaJpcWy/bLGISG8rB5rJeMPMSaXsMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ms0YC/hyYW6eOFas/llW7YfZpxKeYqeXgjhS5rK/img.png?width=685&amp;amp;height=705&amp;amp;face=0_0_685_705&quot;&gt;&lt;a href=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output-1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VO3sw/hyYU4WIXTM/ebnmcDA206VAQChKKxXT2k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Qkbeu/hyYVaJpcWy/bLGISG8rB5rJeMPMSaXsMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ms0YC/hyYW6eOFas/llW7YfZpxKeYqeXgjhS5rK/img.png?width=685&amp;amp;height=705&amp;amp;face=0_0_685_705');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) Specific features&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) SPDIF output[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interfa&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/362</guid>
      <comments>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output#entry362comment</comments>
      <pubDate>Mon, 19 May 2025 02:42:28 +0900</pubDate>
    </item>
    <item>
      <title>[STM32F7] SAI(Serial audio interface) AC'97 Protocol</title>
      <link>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QimO9/btsN2X1kxyz/8Etpnh1VHBUad1ssZ71rv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QimO9/btsN2X1kxyz/8Etpnh1VHBUad1ssZ71rv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QimO9/btsN2X1kxyz/8Etpnh1VHBUad1ssZ71rv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQimO9%2FbtsN2X1kxyz%2F8Etpnh1VHBUad1ssZ71rv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;460&quot; height=&quot;460&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[이전 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747586078358&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) 학습하기 (5)&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio int&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nnA4P/hyYU7My4CI/PfwECFTQVln3GM3kfKJFhk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/m5rMg/hyYW0r5fZ5/XS8HtbhknVZfXSg4wVW1ck/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cnkuwQ/hyYVgJwAGD/r5GYt2xoTmQVw4EpWW33aK/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nnA4P/hyYU7My4CI/PfwECFTQVln3GM3kfKJFhk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/m5rMg/hyYW0r5fZ5/XS8HtbhknVZfXSg4wVW1ck/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cnkuwQ/hyYVgJwAGD/r5GYt2xoTmQVw4EpWW33aK/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) 학습하기 (5)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio int&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt; AC&amp;rsquo;97 link controller&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;694&quot; data-start=&quot;579&quot; data-ke-size=&quot;size16&quot;&gt;SAI는 AC&amp;rsquo;97 프로토콜을 지원하여 슬롯 수/크기가 고정된 고정형 오디오 프레임 구조를 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;이 프로토콜을 선택하려면 SAI_xCR1 레지스터의 PRTCFG[1:0] 비트를 10으로 설정해야 합니다. AC&amp;rsquo;97 모드가 선택되면, 데이터 크기는 반드시 &lt;b&gt;16비트 또는 20비트&lt;/b&gt; 중 하나를 사용해야 하며, 그렇지 않으면 SAI 동작이 보장되지 않습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1003&quot; data-start=&quot;758&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;891&quot; data-start=&quot;758&quot;&gt;NBSLOT[3:0] 및 SLOTSZ[1:0] 비트는 무시되며, 슬롯 수는 &lt;b&gt;고정적으로 13개&lt;/b&gt;입니다. 이 중 첫 번째 슬롯은 &lt;b&gt;16비트&lt;/b&gt; 너비이고, 나머지 슬롯은 &lt;b&gt;20비트&lt;/b&gt; 너비의 데이터 슬롯입니다.&lt;/li&gt;
&lt;li data-end=&quot;941&quot; data-start=&quot;895&quot;&gt;SAI_xSLOTR 레지스터의 FBOFF[4:0] 비트는 무시됩니다.&lt;/li&gt;
&lt;li data-end=&quot;973&quot; data-start=&quot;942&quot;&gt;SAI_xFRCR 레지스터 전체는 무시됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1003&quot; data-start=&quot;974&quot;&gt;MCLK (마스터 클럭)은 사용되지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1128&quot; data-start=&quot;1005&quot; data-ke-size=&quot;size16&quot;&gt;또한, AC&amp;rsquo;97 링크에서는 &lt;b&gt;마스터/슬레이브 설정과 관계없이&lt;/b&gt; 프레임 동기화(FS) 신호를 링크 컨트롤러가 구동하므로, &lt;b&gt;비동기(asynchronous)로 설정된 블록의 FS 핀은 자동으로 출력으로 설정&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;아래 그림은 AC'97 오디오 프레임 구조를 보여줍니다.&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wgds6/btsN3fAB7US/bCjWWK1zeEkL11hMVciEA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wgds6/btsN3fAB7US/bCjWWK1zeEkL11hMVciEA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wgds6/btsN3fAB7US/bCjWWK1zeEkL11hMVciEA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwgds6%2FbtsN3fAB7US%2FbCjWWK1zeEkL11hMVciEA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;831&quot; height=&quot;387&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-style=&quot;style2&quot;&gt;&amp;lt;참고&amp;gt;&lt;br /&gt;AC'97 프로토콜에서 태그의 비트 2는 예약되어 있으므로(항상 0) SAI FIFO에 기록된 값에 관계없이 TAG의 비트 2는 0 레벨로 강제 설정됩니다.&lt;/blockquote&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;는 AC&amp;rsquo;97 통신을 위한 포인트 투 포인트 구조를 구성할 수 있으며, 2개의 SAI를 활용하면 최대 3개의 외부 AC&amp;rsquo;97 디코더를 동시에 제어할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;770&quot; data-start=&quot;756&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;770&quot; data-start=&quot;756&quot; data-ke-size=&quot;size16&quot;&gt;단일 SAI 구성으로는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;824&quot; data-start=&quot;773&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;824&quot; data-start=&quot;773&quot;&gt;SAI A (Tx), SAI B (Rx) -&amp;nbsp; 포인트 투 포인트로 한 개 디코더 제어 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2개의 SAI 구성으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;903&quot; data-start=&quot;859&quot;&gt;SAI1: &lt;b&gt;마스터 송신(A), 슬레이브 수신(B)&lt;/b&gt; &lt;br /&gt;&lt;b&gt;- B는 내부적으로 블록 A와 동기화된 상태&lt;/b&gt;로 구성&lt;/li&gt;
&lt;li data-end=&quot;986&quot; data-start=&quot;906&quot;&gt;SAI2: &lt;b&gt;외부 SAI1에 동기화된 슬레이브 수신기 (A, B 모두) SAI1과 동기화된 상태의 슬레이브 수신기(slave receiver)로 구성&lt;/b&gt;&lt;br /&gt;-&amp;nbsp; 이를 통해 최대 3개의 외부 AC&amp;rsquo;97 디코더를 병렬로 동시에 제어할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;927&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GkHuZ/btsN1ByoRMA/iGWC9HRH3gTxRBg1CPjzVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GkHuZ/btsN1ByoRMA/iGWC9HRH3gTxRBg1CPjzVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GkHuZ/btsN1ByoRMA/iGWC9HRH3gTxRBg1CPjzVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGkHuZ%2FbtsN1ByoRMA%2FiGWC9HRH3gTxRBg1CPjzVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;820&quot; height=&quot;927&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;927&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;968&quot; data-start=&quot;852&quot; data-ke-size=&quot;size16&quot;&gt;SAI가 AC&amp;rsquo;97 수신기로 동작 중일 때, &lt;b&gt;슬롯 0번의 codec-ready 비트가 0이면&lt;/b&gt;, SAI는 &lt;b&gt;FIFO에 데이터를 저장하지 않으며, DMA 또는 인터럽트 요청도 발생시키지 않습니다. &lt;/b&gt;이 상태를 감지하기 위해 SAI_xIM 레지스터에서 CNRDYIE 비트를 활성화하면, &lt;b&gt;SAI_xSR 레지스터의 CNRDY 플래그가 설정되고 인터럽트가 발생&lt;/b&gt;합니다. 이 방식은 &lt;b&gt;코덱이 준비되지 않은 경우 데이터를 자동으로 필터링&lt;/b&gt;하는 데 유용하며, AC&amp;rsquo;97 프로토콜 전용 기능입니다.&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt; AC&amp;rsquo;97 모드에서의 클럭 생성기 설정&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;388&quot; data-start=&quot;247&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;920&quot; data-start=&quot;848&quot; data-ke-size=&quot;size16&quot;&gt;AC&amp;rsquo;97 모드에서는 &lt;b&gt;프레임 길이가 256비트로 고정되고&lt;/b&gt;, &lt;b&gt;프레임 주파수는 반드시 48kHz로 설정&lt;/b&gt;해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;920&quot; data-start=&quot;848&quot; data-ke-size=&quot;size16&quot;&gt;이를 위해 &lt;b&gt;FRL을 255로 설정하고&lt;/b&gt;, SAI 클럭 생성기 공식에 따라 비트 클럭(SCK)과 마스터 클럭(MCLK)을 계산해 맞춰야 합니다. 이 방식은 AC&amp;rsquo;97 규격을 정확히 따르는 데 필수이며, 오디오 전송의 타이밍 정확도에 결정적입니다.&lt;/p&gt;
&lt;p data-end=&quot;846&quot; data-start=&quot;696&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[다음 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747590174616&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) SPDIF output&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio int&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qiJkV/hyYU2YO8Sz/K8nVHZaU0ccwoiTxh0OB9k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424,https://scrap.kakaocdn.net/dn/baLk3T/hyYU7TlCyW/pKkaRu4ktQP3x4SgtAyg8k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424,https://scrap.kakaocdn.net/dn/pVIK3/hyYVgirmgX/UvXuoVmgXyUndjEs3BEc5k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-SPDIF-output&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qiJkV/hyYU2YO8Sz/K8nVHZaU0ccwoiTxh0OB9k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424,https://scrap.kakaocdn.net/dn/baLk3T/hyYU7TlCyW/pKkaRu4ktQP3x4SgtAyg8k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424,https://scrap.kakaocdn.net/dn/pVIK3/hyYVgirmgX/UvXuoVmgXyUndjEs3BEc5k/img.png?width=766&amp;amp;height=424&amp;amp;face=0_0_766_424');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) SPDIF output&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (6)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio int&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/361</guid>
      <comments>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6#entry361comment</comments>
      <pubDate>Mon, 19 May 2025 02:01:56 +0900</pubDate>
    </item>
    <item>
      <title>[STM32F7] SAI(Serial audio interface) FIFO, Interrupt</title>
      <link>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKeUcB/btsN1sVZobv/vhH5twkD4uKajEitICSt0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKeUcB/btsN1sVZobv/vhH5twkD4uKajEitICSt0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKeUcB/btsN1sVZobv/vhH5twkD4uKajEitICSt0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKeUcB%2FbtsN1sVZobv%2FvhH5twkD4uKajEitICSt0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;455&quot; height=&quot;455&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[이전 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747581507980&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) 학습하기 (4)&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataShee&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCxEQ7/hyYVgvODwx/nCpJGfntLTLBYbDRMoFCOk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cZVEkd/hyYTnh5uvJ/GvbEuMmt1ajd14geb3u5Rk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/vMzDc/hyYThPJaF8/ycabMVbCxkt7xywJrSsD80/img.png?width=847&amp;amp;height=451&amp;amp;face=0_0_847_451&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCxEQ7/hyYVgvODwx/nCpJGfntLTLBYbDRMoFCOk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cZVEkd/hyYTnh5uvJ/GvbEuMmt1ajd14geb3u5Rk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/vMzDc/hyYThPJaF8/ycabMVbCxkt7xywJrSsD80/img.png?width=847&amp;amp;height=451&amp;amp;face=0_0_847_451');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) 학습하기 (4)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataShee&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;Internal FIFOs&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;92&quot; data-end=&quot;239&quot;&gt;SAI의 각 오디오 블록에는 고유한 FIFO가 있습니다. 해당 블록이 송신기로 설정되어 있다면 FIFO는 쓰기(write) 동작을 하고, 수신기로 설정되어 있다면 FIFO는 읽기(read) 동작을 수행합니다. 따라서 &lt;b&gt;SAI_xSR 레지스터의 FREQ 비트&lt;/b&gt;와 연결된 FIFO 요청(FIFO request)은 하나뿐입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;92&quot; data-end=&quot;239&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;386&quot; data-start=&quot;305&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SAI_xIM 레지스터에서 FREQIE 비트가 활성화된 경우&lt;/b&gt;, 인터럽트가 발생할 수 있습니다. 이 인터럽트의 발생 조건은 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;546&quot; data-start=&quot;387&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;453&quot; data-start=&quot;387&quot;&gt;&lt;b&gt;FIFO 임계값(FIFO threshold)&lt;/b&gt; 설정 (SAI_xCR2 레지스터의 FLVL 비트에 의해 설정됨)&lt;/li&gt;
&lt;li data-end=&quot;546&quot; data-start=&quot;454&quot;&gt;&lt;b&gt;통신 방향&lt;/b&gt; (송신기인지 수신기인지)&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;- 아래에서 설명,&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;220&quot; data-end=&quot;248&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt; &lt;b&gt;송신기 모드에서의 인터럽트 생성&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;168&quot; data-start=&quot;105&quot; data-ke-size=&quot;size16&quot;&gt;송신기 모드에서 인터럽트 발생 여부는 FIFO 설정에 따라 달라집니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;598&quot; data-start=&quot;170&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;598&quot; data-start=&quot;170&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;269&quot; data-start=&quot;170&quot;&gt;SAI_xCR2 레지스터의 FIFO 임계값 비트(FTH[2:0])가 FIFO 비어 있음(FIFO empty)으로 설정되어 있는 경우 (즉, 0b000),만약 &lt;b&gt;SAI_xDR 레지스터에 전송할 데이터가 하나도 없다면&lt;/b&gt;, &lt;b&gt;SAI_xSR 레지스터의 FREQ 비트&lt;/b&gt;가 하드웨어에 의해 1로 설정되며 인터럽트가 발생합니다. (이때, SAI_xSR의 &lt;b&gt;FLVL[2:0]&lt;/b&gt; 비트가 0b001보다 작다는 것은 FIFO가 완전히 비어 있음을 의미합니다.)이 인터럽트는 &lt;b&gt;FIFO가 더 이상 비어 있지 않을 때&lt;/b&gt;, 즉 FIFO에 &lt;b&gt;하나 이상의 데이터가 저장되면&lt;/b&gt; 자동으로 클리어됩니다. 이때, FLVL[2:0] 값이 0b000이 아니게 되므로, 인터럽트 플래그(FREQ)도 자동으로 내려갑니다. &lt;br /&gt;즉, 인터럽트는 &lt;b&gt;비어 있는 순간&lt;/b&gt;에만 발생하며, 그 상태가 해소되면 즉시 사라집니다.&lt;/li&gt;
&lt;li data-end=&quot;269&quot; data-start=&quot;170&quot;&gt;SAI_xCR2 레지스터의 FIFO 임계값(FTH[2:0])이 1/4 채움 상태(FIFO quarter full)로 설정된 경우 (FTH = 0b001), &lt;b&gt;FIFO에 저장된 데이터가 1/4 미만&lt;/b&gt;일 때 인터럽트가 발생합니다. 이 경우 하드웨어가 SAI_xSR 레지스터의 &lt;b&gt;FREQ 비트를 1&lt;/b&gt;로 설정하여 인터럽트를 생성합니다. 즉, SAI_xSR의 &lt;b&gt;FLVL[2:0] 비트 값이 0b010보다 작을 때&lt;/b&gt; 인터럽트가 발생합니다. 이 인터럽트(FREQ)는, &lt;b&gt;FIFO에 적어도 1/4 이상 데이터가 저장되었을 때&lt;/b&gt; (즉, FLVL[2:0] &amp;ge; 0b010), &lt;b&gt;하드웨어에 의해 자동으로 클리어&lt;/b&gt;됩니다.&lt;br /&gt;이 구조는 &lt;b&gt;FIFO 언더런(underrun)을 방지하기 위해, &lt;/b&gt;데이터가 완전히 소진되기 전에 &lt;b&gt;미리 CPU나 DMA가 데이터를 공급할 수 있도록 유도&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;269&quot; data-start=&quot;170&quot;&gt;SAI_xCR2 레지스터의 FIFO 임계값 비트(FTH[2:0])가 FIFO 절반 채움 상태(half full)로 설정된 경우 (FTH = 0b010), &lt;b&gt;FIFO에 저장된 데이터가 절반보다 적을 때&lt;/b&gt;, 인터럽트가 발생합니다. 즉, SAI_xSR 레지스터의 &lt;b&gt;FLVL[2:0] 비트가 0b011보다 작을 때&lt;/b&gt;, &lt;b&gt;FREQ 비트가 하드웨어에 의해 1로 설정&lt;/b&gt;되어 인터럽트가 생성됩니다. 이 인터럽트는, &lt;b&gt;FIFO에 최소 절반 이상 데이터가 채워졌을 때&lt;/b&gt;(FLVL &amp;ge; 0b011) &lt;b&gt;하드웨어가 FREQ 비트를 자동으로 클리어&lt;/b&gt;하면서 종료됩니다.&lt;br /&gt;정리하면 &lt;b&gt;FIFO에 데이터가 절반 미만으로 남았을 때 인터럽트가 발생하며, &lt;/b&gt;이 인터럽트는 &lt;b&gt;FIFO가 다시 절반 이상 채워지면 자동으로 해제&lt;/b&gt;됩니다.&lt;br /&gt;이 설정은 &lt;b&gt;FIFO가 너무 빨리 비는 것을 방지하고&lt;/b&gt;, 데이터가 끊기지 않도록 사전에 보충할 수 있도록 돕는 중간 단계의 보호 수단입니다.&lt;/li&gt;
&lt;li data-end=&quot;269&quot; data-start=&quot;170&quot;&gt;SAI_xCR2 레지스터의 FIFO 임계값 비트(FTH[2:0])가 FIFO 3/4 채움 상태(three quarter full)로 설정된 경우 (FTH = 0b011), &lt;b&gt;FIFO에 저장된 데이터가 3/4 미만일 때&lt;/b&gt;, 인터럽트가 발생(FREQ 비트가 하드웨어에 의해 1로 설정)합니다. 즉, SAI_xSR 레지스터의 &lt;b&gt;FLVL[2:0] 비트 값이 0b100보다 작을 때&lt;/b&gt; 인터럽트가 생성됩니다. 이 인터럽트는, &lt;b&gt;FIFO에 적어도 3/4 이상 데이터가 채워졌을 때 &lt;/b&gt;(즉, FLVL[2:0] &amp;ge; 0b100) &lt;b&gt;FREQ 비트가 하드웨어에 의해 자동으로 클리어&lt;/b&gt;되어 해제됩니다.&lt;br /&gt;정리하자면 &lt;b&gt;FIFO에 데이터가 3/4 미만으로 저장되어 있을 때 인터럽트가 발생&lt;/b&gt;합니다. 이후 &lt;b&gt;FIFO가 다시 3/4 이상 채워지면 인터럽트는 자동으로 해제&lt;/b&gt;됩니다.&lt;br /&gt;이 방식은 FIFO가 충분히 채워진 상태에서만 전송이 이뤄지도록 유도하며, &lt;b&gt;데이터 언더런을 사전에 방지하는 안정 지향적인 설계&lt;/b&gt;에 적합합니다.&lt;/li&gt;
&lt;li data-end=&quot;269&quot; data-start=&quot;170&quot;&gt;SAI_xCR2 레지스터의 FIFO 임계값 비트(FTH[2:0])가 FIFO 가득 참(FIFO full)으로 설정된 경우 (FTH = 0b100), &lt;b&gt;FIFO가 완전히 가득 차지 않았을 경우 &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(FLVL[2:0] &amp;lt; 0b101), &lt;/span&gt;&lt;b&gt;하드웨어는 SAI_xSR 레지스터의 FREQ 비트를 1로 설정하여 인터럽트를 발생시킵니다. &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 인터럽트(FREQ 비트)는, &lt;/span&gt;&lt;b&gt;FIFO가 완전히 가득 찼을 때&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(FLVL = 0b101) &lt;/span&gt;&lt;b&gt;하드웨어에 의해 자동으로 클리어됩니다.&lt;br /&gt;&lt;/b&gt;요약하면 &lt;b&gt;FIFO가 완전히 차지 않은 상태에서는 인터럽트가 발생&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하고, &lt;/span&gt;&lt;b&gt;FIFO가 완전히 채워졌을 때 자동으로 인터럽트가 해제&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;됩니다.&lt;br /&gt;&lt;/span&gt;이 방식은 &lt;b&gt;FIFO가 충분히 버퍼링된 후 전송하도록 설계된 시스템&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;에 적합하며,&lt;/span&gt;데이터 손실 없이 안정적인 대량 전송을 요구하는 경우에 유리합니다.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;&lt;b&gt;수신기 모드에서의 인터럽트 생성&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;170&quot; data-start=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;수신기 모드에서의 인터럽트 발생 조건은 FIFO 구성에 따라 달라집니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;402&quot; data-start=&quot;172&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;261&quot; data-start=&quot;172&quot;&gt;SAI_xCR2 레지스터의 FIFO 임계값 비트(FTH[2:0])가 FIFO Empty (FTH = 0b000)로 설정된 경우, &lt;b&gt;SAI_xDR 레지스터에 적어도 하나 이상의 데이터가 존재&lt;/b&gt;하면 (SAI_xSR의 FLVL[2:0] &amp;ge; 0b001), &lt;b&gt;SAI_xSR 레지스터의 FREQ 비트가 하드웨어에 의해 1로 설정되며&lt;/b&gt;, 인터럽트가 발생합니다. 이 인터럽트(FREQ 비트)는, &lt;b&gt;FIFO가 다시 비었을 때&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; (FLVL[2:0] = 0b000) &lt;/span&gt;&lt;b&gt;하드웨어에 의해 자동으로 클리어됩니다.&lt;br /&gt;&lt;/b&gt;요악하면 &lt;b&gt;FIFO에 데이터가 하나라도 들어오는 순간 인터럽트가 발생&lt;/b&gt;합니다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 인터럽트는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;FIFO가 다시 비면 자동으로 해제&lt;/b&gt;됩니다.&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 방식은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;즉시 처리해야 할 수신 데이터를 빠르게 감지할 수 있어서, &lt;/b&gt;낮은 지연이 필요한 시스템에 매우 유용합니다.&lt;/li&gt;
&lt;li data-end=&quot;261&quot; data-start=&quot;172&quot;&gt;SAI_xCR2 레지스터에서 FIFO 임계값 비트(FTH[2:0])가 FIFO 1/4 채움 상태(FTH = 0b001)로 설정된 경우, &lt;b&gt;FIFO의 저장 공간 중 최소 1/4 이상이 채워져 있을 때 &lt;/b&gt;(FLVL[2:0] &amp;ge; 0b010), &lt;b&gt;하드웨어가 SAI_xSR 레지스터의 FREQ 비트를 1로 설정&lt;/b&gt;하여&lt;br /&gt;인터럽트를 발생시킵니다. 이 인터럽트(FREQ)는,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;FIFO의 데이터가 1/4 미만으로 떨어졌을 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;(FLVL[2:0] &amp;lt; 0b010),&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;하드웨어에 의해 자동으로 클리어됩니다.&lt;br /&gt;&lt;/b&gt;요약하면 &lt;b&gt;FIFO에 데이터가 1/4 이상 쌓였을 때 인터럽트가 발생&lt;/b&gt;하고,&lt;b&gt;다시 1/4 미만으로 줄어들면 인터럽트는 자동으로 해제&lt;/b&gt;됩니다.&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 방식은, 데이터를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;여유 있게 확보한 뒤에 처리할 수 있는 환경&lt;/b&gt;에 적합하며, &lt;b&gt;시스템 부하를 줄이는 동시에 안정적인 수신을 가능하게&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;261&quot; data-start=&quot;172&quot;&gt;SAI_xCR2 레지스터의 FIFO 임계값 비트(FTH[2:0])가 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;FIFO 절반 채움 상태(FTH = 0b010)로 설정된 경우, &lt;/span&gt;&lt;b&gt;FIFO 저장 공간의 절반 이상이 데이터로 채워져 있을 때 &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(FLVL[2:0] &amp;ge; 0b011), &lt;/span&gt;&lt;b&gt;하드웨어가 SAI_xSR 레지스터의 FREQ 비트를 1로 설정&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하여 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;인터럽트를 발생시킵니다. &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 인터럽트(FREQ 비트)는, &lt;/span&gt;&lt;b&gt;FIFO에 저장된 데이터가 절반 미만이 되었을 때 &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(FLVL[2:0] &amp;lt; 0b011), &lt;/span&gt;&lt;b&gt;하드웨어에 의해 자동으로 클리어됩니다.&lt;br /&gt;&lt;/b&gt;요약하면 &lt;b&gt;FIFO에 데이터가 절반 이상 쌓였을 때 인터럽트가 발생&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하고, &lt;/span&gt;&lt;b&gt;다시 절반 미만으로 떨어지면 인터럽트는 자동 해제&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;됩니다. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 방식은 &lt;/span&gt;&lt;b&gt;빈번한 인터럽트 호출을 줄이면서도 일정량의 데이터를 확보하고 처리&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하는 데 적합하며, &lt;/span&gt;&lt;b&gt;DMA나 대용량 버퍼 기반 수신 구조에 효과적입니다.&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;261&quot; data-start=&quot;172&quot;&gt;SAI_xCR2 레지스터에서 FIFO 임계값 비트(FTH[2:0])가 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;FIFO 3/4 채움 상태(FTH = 0b011)로 설정된 경우, &lt;/span&gt;&lt;b&gt;FIFO 저장 공간의 3/4 이상이 데이터로 채워져 있을 때 &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(FLVL[2:0] &amp;ge; 0b100), &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하드웨어는 SAI_xSR 레지스터의 &lt;/span&gt;&lt;b&gt;FREQ 비트를 1로 설정&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하여 &lt;/span&gt;&lt;b&gt;인터럽트를 발생&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;시킵니다. &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 인터럽트(FREQ 비트)는, &lt;/span&gt;&lt;b&gt;FIFO의 데이터가 3/4 미만으로 줄어들었을 때 &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(FLVL[2:0] &amp;lt; 0b100), &lt;/span&gt;&lt;b&gt;하드웨어에 의해 자동으로 클리어됩니다.&lt;br /&gt;&lt;/b&gt;요약하면 &lt;b&gt;FIFO에 데이터가 3/4 이상 쌓였을 때 인터럽트가 발생&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하고, &lt;/span&gt;&lt;b&gt;3/4 미만으로 줄어들면 자동으로 해제&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;됩니다.&lt;br /&gt;&lt;/span&gt;이 구성은 &lt;b&gt;빈번한 인터럽트를 피하고, 데이터를 묶어서 효율적으로 처리&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하려는 경우에 적합하며, &lt;/span&gt;&lt;b&gt;버스트 기반 처리&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;, &lt;/span&gt;&lt;b&gt;지연 허용 수신 시스템&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;에서 유리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;261&quot; data-start=&quot;172&quot;&gt;SAI_xCR2 레지스터의 FIFO 임계값 비트(FTH[2:0])가 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;FIFO 가득 참(full)으로 설정된 경우 (FTH = 0b100), &lt;/span&gt;&lt;b&gt;FIFO가 완전히 가득 찼을 때 &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(SAI_xSR의 FLVL[2:0] = 0b101), &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하드웨어는 SAI_xSR 레지스터의 &lt;/span&gt;&lt;b&gt;FREQ 비트를 1로 설정&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하여 &lt;/span&gt;&lt;b&gt;인터럽트를 발생시킵니다&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 인터럽트(FREQ 비트)는, &lt;/span&gt;&lt;b&gt;FIFO가 가득 차지 않은 상태가 되었을 때 &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(FLVL[2:0] &amp;lt; 0b101), &lt;/span&gt;&lt;b&gt;하드웨어에 의해 자동으로 클리어됩니다.&lt;br /&gt;&lt;/b&gt;요약하면 &lt;b&gt;FIFO가 완전히 가득 찼을 때 인터럽트가 발생&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하며, &lt;/span&gt;&lt;b&gt;데이터가 하나라도 빠지면 자동으로 해제&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;됩니다.&lt;br /&gt;&lt;/span&gt;이 방식은 &lt;b&gt;수신 데이터를 최대한 누적 후 처리&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하려는 경우에 유리하며, &lt;/span&gt;&lt;b&gt;인터럽트 빈도를 최소화&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하고 &lt;/span&gt;&lt;b&gt;최대량 수신 후 처리&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;가 필요한 시스템에 적합합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;199&quot; data-start=&quot;114&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;199&quot; data-start=&quot;114&quot; data-ke-size=&quot;size16&quot;&gt;인터럽트 발생 방식과 마찬가지로, SAI_xCR1 레지스터의 &lt;b&gt;DMAEN 비트가 설정되면&lt;/b&gt;, &lt;b&gt;SAI는 DMA를 사용할 수 있습니다. &lt;/b&gt;&lt;b&gt;FREQ 비트가 설정되는 방식은&lt;/b&gt;, 앞서 설명한 &lt;b&gt;FREQIE를 통한 인터럽트 발생 방식과 동일&lt;/b&gt;합니다. 각 FIFO는 &lt;b&gt;8워드(word) 크기&lt;/b&gt;로 구성되어 있으며, FIFO에 대해 &lt;b&gt;읽기 또는 쓰기 작업이 수행될 때마다&lt;/b&gt;, 접근 크기(size)와 관계없이 &lt;b&gt;한 워드 크기의 공간&lt;/b&gt;이 사용됩니다. &lt;b&gt;각 FIFO 워드에는 오디오 슬롯(audio slot) 하나가 포함되어 있으며&lt;/b&gt;, &lt;b&gt;SAI_xDR 레지스터에 접근할 때마다 FIFO 포인터는 한 워드씩 증가하여, &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;DMA 또는 CPU가 데이터를 순차적으로 처리하도록 설계되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1023&quot; data-start=&quot;927&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SAI에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SAI_xDR 레지스터에&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이터를 읽거나 쓸 때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;항상 오른쪽 정렬(Right-aligned)&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;형식을 사용해야 합니다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 덕분에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;다양한 비트 폭(8, 16, 24, 32비트)&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터를 통일된 방식으로 처리할 수 있습니다.&lt;/span&gt; 또한, &lt;/span&gt;SAI가 비활성화된 상태에서, SAI_xCR2 레지스터의 FFLUSH 비트를 설정하면, FIFO 포인터를 초기화(reinitialize)할 수 있습니다. 만약 SAI가 활성화된 상태에서 FFLUSH를 설정하면, FIFO에 저장되어 있던 데이터는 자동으로 소실되므로 주의가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;1354&quot; data-end=&quot;1570&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[다음 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747587741632&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) 학습하기 (6)&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio int&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmIdJj/hyYTkeEz5E/BxWU0qH8tvB6Vc2zvpKybK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/VhaGf/hyYU583Gw2/hePRMgaGKptLF3nJhKsff0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/xNkFl/hyYVc1p1DD/XWJaBTeLXY9w1R5h9jplzK/img.png?width=820&amp;amp;height=927&amp;amp;face=0_0_820_927&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-6&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmIdJj/hyYTkeEz5E/BxWU0qH8tvB6Vc2zvpKybK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/VhaGf/hyYU583Gw2/hePRMgaGKptLF3nJhKsff0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/xNkFl/hyYVc1p1DD/XWJaBTeLXY9w1R5h9jplzK/img.png?width=820&amp;amp;height=927&amp;amp;face=0_0_820_927');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) 학습하기 (6)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (5)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio int&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/360</guid>
      <comments>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5#entry360comment</comments>
      <pubDate>Mon, 19 May 2025 01:11:57 +0900</pubDate>
    </item>
    <item>
      <title>[STM32F7] SAI(Serial audio interface) 슬롯 구성</title>
      <link>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4</link>
      <description>&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMCOIC/btsN03I4aB2/G2y4Uao0cgPKg9BRf8KoPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMCOIC/btsN03I4aB2/G2y4Uao0cgPKg9BRf8KoPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMCOIC/btsN03I4aB2/G2y4Uao0cgPKg9BRf8KoPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMCOIC%2FbtsN03I4aB2%2FG2y4Uao0cgPKg9BRf8KoPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;511&quot; height=&quot;511&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[이전 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747543515561&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) 학습하기 (3)&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-3&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CpYq9/hyYU3JZc0S/zmQ5tFp6GlVQuxj7IPgWQ0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/q1zXb/hyYWSAJbPR/nPWEdUNUKVaN1oeqzLPqi1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/d67pup/hyYW1EqGQb/3znKFFqAoJ3RaEcKkKSIZk/img.png?width=949&amp;amp;height=717&amp;amp;face=0_0_949_717&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CpYq9/hyYU3JZc0S/zmQ5tFp6GlVQuxj7IPgWQ0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/q1zXb/hyYWSAJbPR/nPWEdUNUKVaN1oeqzLPqi1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/d67pup/hyYW1EqGQb/3znKFFqAoJ3RaEcKkKSIZk/img.png?width=949&amp;amp;height=717&amp;amp;face=0_0_949_717');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) 학습하기 (3)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;슬롯 구성(Slot configuration)&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;88&quot; data-end=&quot;213&quot;&gt;슬롯은 오디오 프레임에서 가장 기본적인 단위입니다. SAI에서는 오디오 프레임을 여러 개의 슬롯(Slot)으로 나누어 전송합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;88&quot; data-end=&quot;213&quot;&gt;이 슬롯은 각각 하나의 채널이나 데이터 블록에 해당하며, 기본적으로 NBSLOT[3:0] + 1 방식으로 개수를 설정합니다. 최대 16개까지 설정 가능하며, 다채널 오디오 전송이나 TDM 구성에서 매우 유용하게 사용됩니다. 다만 AC&amp;rsquo;97이나 SPDIF (즉, PRTCFG[1:0] = 10 또는 PRTCFG[1:0] = 01) 와 같이 &lt;b&gt;표준이 고정된 프로토콜&lt;/b&gt;을 사용할 경우, 슬롯 수는 자동으로 결정되며 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;NBSLOT[3:0]를 통한 &lt;/span&gt;설정은 무시됩니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-end=&quot;1134&quot; data-start=&quot;891&quot; data-ke-size=&quot;size16&quot;&gt;각 슬롯은 SAI_xSLOTR 레지스터의 SLOTEN[15:0] 비트를 설정하여 각 슬롯을 &lt;b&gt;유효하거나 무효한 슬롯으로 정의&lt;/b&gt;할 수 있습니다.&lt;br /&gt;송신기(transmitter) 모드에서는 무효 슬롯이 전송될 때, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;TRIS 비트 설정에 따라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;SD 데이터 라인을 0으로 고정하거나(high) &lt;/b&gt;&lt;b&gt;하이 임피던스(high-Z) 상태로 해제&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;1134&quot; data-start=&quot;891&quot; data-ke-size=&quot;size16&quot;&gt;수신기(receiver) 모드에서는, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;무효 슬롯의 끝에서 받은 값은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;무시&lt;/b&gt;됩니다. 즉, 해당 슬롯에 대해서는 FIFO 접근이 이루어지지 않으며, FIFO에 대한 읽기/쓰기 요청도 발생하지 않습니다.&lt;/p&gt;
&lt;p data-end=&quot;1134&quot; data-start=&quot;891&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 구조는 멀티채널 환경에서 일부 채널만 선택적으로 사용하는 데 유리하며, DMA와 버스 자원 낭비를 줄일 수 있는 유용한 기능입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;239&quot; data-start=&quot;92&quot; data-ke-size=&quot;size16&quot;&gt;슬롯 크기도 아래 그림에서 보이는 것처럼 구성할 수 있습니다. 슬롯의 크기는 SAI_xSLOTR 레지스터의 SLOTSZ[1:0] 비트를 설정함으로써 선택됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;설정된 크기는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;오디오 프레임 내 모든 슬롯에 동일하게 적용됩니다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;슬롯 크기를 적절히 구성하면 DMA 처리 단위를 최적화할 수 있으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;다채널 TDM 전송이나 32비트 인터페이스에서도 유연하게 대응할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;239&quot; data-start=&quot;92&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;451&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgdOqu/btsN1NMbKUa/zXkAerHCqw6lYv8mjWfyyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgdOqu/btsN1NMbKUa/zXkAerHCqw6lYv8mjWfyyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgdOqu/btsN1NMbKUa/zXkAerHCqw6lYv8mjWfyyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgdOqu%2FbtsN1NMbKUa%2FzXkAerHCqw6lYv8mjWfyyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;847&quot; height=&quot;451&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;451&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-start=&quot;92&quot; data-end=&quot;239&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1044&quot; data-start=&quot;830&quot; data-ke-size=&quot;size16&quot;&gt;SAI는 슬롯 내에서 &lt;b&gt;첫 데이터 비트의 위치를 설정할 수 있습니다. 이 오프셋(offset)은 SAI_xSLOTR 레지스터의 FBOFF[4:0] 비트를 통해 설정합니다. &lt;/b&gt;송신 시에는 오프셋 전 구간에 '0'이 채워지고, 수신 시에는 이 구간의 데이터가 무시됩니다. 이 기능은 특히 &lt;b&gt;LSB 정렬 방식&lt;/b&gt;의 전송을 구현할 때 유용하며, 슬롯 크기에서 데이터 크기를 뺀 만큼 오프셋을 설정하면 데이터가 슬롯의 가장 끝쪽에 정렬되어 전송됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1044&quot; data-start=&quot;830&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;447&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dk413z/btsN2fVII3i/lvWx2pKRGfjf9RLK08Orzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dk413z/btsN2fVII3i/lvWx2pKRGfjf9RLK08Orzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dk413z/btsN2fVII3i/lvWx2pKRGfjf9RLK08Orzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdk413z%2FbtsN2fVII3i%2FlvWx2pKRGfjf9RLK08Orzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;846&quot; height=&quot;447&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;447&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;454&quot; data-start=&quot;360&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;454&quot; data-start=&quot;360&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;146&quot; data-start=&quot;103&quot; data-ke-size=&quot;size16&quot;&gt;SAI 구성 시에는 슬롯과 프레임 사이의 정렬을 보장하기 위해 반드시 아래의 조건을 만족해야 합니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;228&quot; data-start=&quot;148&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;175&quot; data-start=&quot;148&quot;&gt;FBOFF &amp;le; (SLOTSZ - DS)&lt;/li&gt;
&lt;li data-end=&quot;193&quot; data-start=&quot;176&quot;&gt;DS &amp;le; SLOTSZ&lt;/li&gt;
&lt;li data-end=&quot;228&quot; data-start=&quot;194&quot;&gt;NBSLOT &amp;times; SLOTSZ &amp;le; FRL (프레임 길이)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;949&quot; data-end=&quot;1085&quot;&gt;
&lt;li data-start=&quot;949&quot; data-end=&quot;1010&quot;&gt;&lt;b&gt;오프셋(FBOFF)은 슬롯 크기(SLOTSZ)에서 데이터 크기(DS)를 뺀 값보다 작아야 하며&lt;/b&gt;,&lt;/li&gt;
&lt;li data-start=&quot;1011&quot; data-end=&quot;1043&quot;&gt;&lt;b&gt;데이터 크기(DS)는 슬롯(SLOTSZ)보다 작거나 같아야 하고&lt;/b&gt;,&lt;/li&gt;
&lt;li data-start=&quot;1044&quot; data-end=&quot;1085&quot;&gt;&lt;b&gt;전체 슬롯 길이(NBSLOT x SLOTSZ)는 프레임 길이(FRL)를 초과해서는 안 됩니다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;302&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;또한, SAI_xFRCR 레지스터에서 &lt;b&gt;FSDEF 비트가 설정된 경우&lt;/b&gt;, &lt;b&gt;슬롯 수는 반드시 짝수여야 하며, &lt;/b&gt;AC&amp;rsquo;97 및 SPDIF 프로토콜 모드 (PRTCFG[1:0] = 10 또는 01)에서는 슬롯 크기를 직접 설정할 수 없습니다. &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;302&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;이러한 조건을 지켜야 SAI 인터페이스가 안정적으로 동작합니다.&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;&amp;nbsp;SAI 클럭 생성(SAI clock generator)&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SAI는 각 오디오 블록마다 &lt;b&gt;개별 클럭 생성기를 내장하고 있어&lt;/b&gt;, 두 블록이 완전히 독립적으로 작동할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 두 클럭 생성기 간의 기능 차이는 없습니다. &lt;b&gt;마스터로 설정된 블록은 통신용 비트 클럭과 외부 디코더용 마스터 클럭을 생성&lt;/b&gt;하며,&lt;br /&gt;&lt;b&gt;슬레이브로 설정된 블록은 내부 클럭 생성기가 꺼지고 외부 클럭에 동기화&lt;/b&gt;됩니다.&lt;br /&gt;이 구조는 오디오 송수신을 유연하게 구성하는 데 핵심적인 역할을 하며, 아래 그림은 오디오 블록 클럭 생성기의 구조를 보여줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPRbM4/btsN1ZS8we1/yAXUTmt922OwxBrXqpjVS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPRbM4/btsN1ZS8we1/yAXUTmt922OwxBrXqpjVS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPRbM4/btsN1ZS8we1/yAXUTmt922OwxBrXqpjVS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPRbM4%2FbtsN1ZS8we1%2FyAXUTmt922OwxBrXqpjVS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;823&quot; height=&quot;384&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&amp;lt;참고&amp;gt;&lt;br /&gt;NODIV 비트가 1로 설정된 경우, MCLK_x 핀이 GPIO 주변 장치에서 SAI 핀으로 설정되어 있을 때, 해당 MCLK_x 신호는 '0' 레벨(LOW 상태)로 유지됩니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;261&quot; data-start=&quot;106&quot; data-ke-size=&quot;size16&quot;&gt;클럭 생성기의 소스는 제품의 클럭 컨트롤러(Product Clock Controller)로부터 공급됩니다.&lt;br /&gt;sai_x_ker_ck 클럭은 **마스터 클럭(MCLK)**과 동일하며, MCKDIV[3:0] 비트를 사용하여 &lt;b&gt;외부 장치가 요구하는 클럭 속도에 맞게 분주할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;394&quot; data-start=&quot;263&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;335&quot; data-start=&quot;263&quot;&gt;MCKDIV[3:0] &amp;ne; 0000인 경우(나눠져서 출력): &lt;b&gt;MCLK_x = sai_x_ker_ck / (MCKDIV &amp;times; 2)&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;394&quot; data-start=&quot;337&quot;&gt;MCKDIV[3:0] = 0000인 경우(그대로 출력): &lt;b&gt;MCLK_x = sai_x_ker_ck&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;394&quot; data-start=&quot;337&quot;&gt;이 MCLK_x 신호는 &lt;b&gt;Free Protocol Mode에서만 사용됩니다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1023&quot; data-start=&quot;924&quot; data-ke-size=&quot;size16&quot;&gt;SAI에서 MCLK와 SCK 클럭을 안정적으로 출력하기 위해서는, &lt;b&gt;분주 값은 반드시 짝수여야 하며&lt;/b&gt;, 이를 통해 &lt;b&gt;50% 듀티 사이클&lt;/b&gt;을 유지할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;1151&quot; data-start=&quot;1025&quot; data-ke-size=&quot;size16&quot;&gt;MCKDIV[3:0] 비트를 0000으로 설정하면 분주 없이 원본 클럭(sai_x_ker_ck)이 그대로 출력됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1151&quot; data-start=&quot;1025&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1151&quot; data-start=&quot;1025&quot; data-ke-size=&quot;size16&quot;&gt;SAI는 오디오 통신의 표준에 맞게 &lt;b&gt;MCLK와 FS의 비율을 256:1&lt;/b&gt;로 고정하여 동작합니다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;일반적으로&amp;nbsp;&lt;/span&gt;&lt;b&gt;세 가지 주파수 범위&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;가 사용되며, 이는 아래 그림과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1213&quot; data-start=&quot;1153&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ud9g6/btsN0dZetlq/rRMtnWMkW6cHLSxUJbUyjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ud9g6/btsN0dZetlq/rRMtnWMkW6cHLSxUJbUyjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ud9g6/btsN0dZetlq/rRMtnWMkW6cHLSxUJbUyjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fud9g6%2FbtsN0dZetlq%2FrRMtnWMkW6cHLSxUJbUyjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;825&quot; height=&quot;463&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1213&quot; data-start=&quot;1153&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;942&quot; data-start=&quot;828&quot; data-ke-size=&quot;size16&quot;&gt;오디오 블록이 마스터(Master)로 선언되고 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SAI_xCR1 레지스터의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;NODIV 비트가 0&lt;/b&gt;으로 설정된 경우에는, 외부 디코더를 위한 마스터 클럭(MCLK)을 I/O 핀(MCLK_x)을 통해 외부로 출력할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;1073&quot; data-start=&quot;944&quot; data-ke-size=&quot;size16&quot;&gt;하지만 슬레이브 모드에서는 내부 클럭 생성기가 비활성화되므로 이 설정은 무시되며, &lt;b&gt;MCLK_x 핀은 GPIO로 사용 가능&lt;/b&gt;하게 해제됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1213&quot; data-start=&quot;1153&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;963&quot; data-start=&quot;885&quot; data-ke-size=&quot;size16&quot;&gt;비트 클럭(SCK_x)은 마스터 클럭(MCLK_x)을 기준으로 오디오 프레임의 길이에 따라 자동 계산됩니다. 비트 클럭 분주기(bit clock divider)는 비트 클럭(SCK_x)과 마스터 클럭(MCLK_x) 사이의 분주 비율을 다음 공식을 기반으로 설정합니다:&lt;/p&gt;
&lt;p data-end=&quot;963&quot; data-start=&quot;885&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-end=&quot;963&quot; data-start=&quot;885&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; SCK_x = MCLK x (FRL[7:0] +1) / 256 &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-end=&quot;963&quot; data-start=&quot;885&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-start=&quot;324&quot; data-end=&quot;328&quot; data-ke-size=&quot;size16&quot;&gt;여기서:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;330&quot; data-end=&quot;457&quot;&gt;
&lt;li data-start=&quot;330&quot; data-end=&quot;380&quot;&gt;256은 MCLK와 오디오 샘플링 주파수(FS) 사이의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;고정 비율&lt;/b&gt;입니다.&lt;/li&gt;
&lt;li data-start=&quot;381&quot; data-end=&quot;457&quot;&gt;FRL[7:0]은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;오디오 프레임 내의 비트 클럭 사이클 수 - 1&lt;/b&gt;로, SAI_xFRCR 레지스터에서 설정됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;257&quot; data-start=&quot;107&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1352&quot; data-start=&quot;1198&quot; data-ke-size=&quot;size16&quot;&gt;SAI를 마스터로 구성할 때는 프레임 길이 설정 시 (FRL[7:0] + 1) 값이 2의 제곱수(power of 2)가 되도록 설정해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;1352&quot; data-start=&quot;1198&quot; data-ke-size=&quot;size16&quot;&gt;이 조건을 만족해야 **비트 클럭 사이클(SCK_x)**당 &lt;b&gt;MCLK_x 펄스가 짝수 개&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;생성되며, &lt;/span&gt;&lt;b&gt;50% 듀티 사이클&lt;/b&gt;이 보장됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1352&quot; data-start=&quot;1198&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;또한, sai_x_ker_ck 클럭을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;비트 클럭(SCK) 주파수와 동일하게&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설정할 수도 있습니다. &lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 경우 SAI_xCR1 레지스터에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;NODIV 비트를 설정&lt;/b&gt;해야 하며, &lt;b&gt;MCKDIV 분주기 및 비트 클럭 분주기 설정은 무시&lt;/b&gt;됩니다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 설정을 사용하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;프레임당 비트 수를 자유롭게 구성할 수 있으며&lt;/b&gt;, &lt;b&gt;반드시 2의 제곱수일 필요는 없습니다. 이 설정은 외부 MCLK가 필요 없는 시스템에 특히 유리합니다. &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-start=&quot;546&quot; data-end=&quot;629&quot; data-ke-size=&quot;size16&quot;&gt;비트 클럭(SCK)의 샘플링 에지(strobing edge)는 SAI_xCR1 레지스터의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;CKSTR 비트&lt;/b&gt;로 설정하여 타이밍 호환성을 확보할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;1352&quot; data-start=&quot;1198&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1570&quot; data-start=&quot;1354&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[다음 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747584736952&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) 학습하기 (5)&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio int&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nnA4P/hyYU7My4CI/PfwECFTQVln3GM3kfKJFhk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/m5rMg/hyYW0r5fZ5/XS8HtbhknVZfXSg4wVW1ck/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cnkuwQ/hyYVgJwAGD/r5GYt2xoTmQVw4EpWW33aK/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-5&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nnA4P/hyYU7My4CI/PfwECFTQVln3GM3kfKJFhk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/m5rMg/hyYW0r5fZ5/XS8HtbhknVZfXSg4wVW1ck/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cnkuwQ/hyYVgJwAGD/r5GYt2xoTmQVw4EpWW33aK/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) 학습하기 (5)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (4)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio int&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/359</guid>
      <comments>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4#entry359comment</comments>
      <pubDate>Sun, 18 May 2025 14:41:01 +0900</pubDate>
    </item>
    <item>
      <title>[STM32F7] SAI(Serial audio interface) 프레임 동기화</title>
      <link>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-3</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPYncY/btsN1i6WyZq/e8cCk9Wk0KGu3hzc0jIsUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPYncY/btsN1i6WyZq/e8cCk9Wk0KGu3hzc0jIsUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPYncY/btsN1i6WyZq/e8cCk9Wk0KGu3hzc0jIsUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPYncY%2FbtsN1i6WyZq%2Fe8cCk9Wk0KGu3hzc0jIsUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;480&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[이전 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1747411188042&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) 학습하기 (2)&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입니다. 만약, 오정보가 있다면 댓글로 알려주시면 감&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-2&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DYWsF/hyYVeqQEK0/2sYTxIBWksgKMnQlKhYBA0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/spUSW/hyYU5Hrrpu/iR9J4LpwnqoAXKPp73mgXk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/iLtTd/hyYU85d1Sl/C54T9H0kk0cgHhPQgry5D0/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DYWsF/hyYVeqQEK0/2sYTxIBWksgKMnQlKhYBA0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/spUSW/hyYU5Hrrpu/iR9J4LpwnqoAXKPp73mgXk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/iLtTd/hyYU85d1Sl/C54T9H0kk0cgHhPQgry5D0/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) 학습하기 (2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataSheet에 나온 문서를 기반으로 개인적으로 정리한 자료입니다. 만약, 오정보가 있다면 댓글로 알려주시면 감&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;Frame 동기화&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;213&quot; data-start=&quot;88&quot; data-ke-size=&quot;size16&quot;&gt;FS 신호는 오디오 프레임에서 프레임 동기화 신호로 동작하며, 프레임의 시작을 알리는 역할을 합니다.&lt;br /&gt;프레임 동기화 동작에 있어 다양한 오디오 프로토콜마다 요구하는 고유한 특성에 맞춰, 이 FS 신호의 파형은 완전히 유연하게 구성할 수 있도록 되어 있습니다.&amp;nbsp; FS 신호의 이런 재구성 가능성은 &lt;b&gt;SAI_xFRCR 레지스터&lt;/b&gt;를 통해 설정하며, 아래 그림은 이 신호 형태의 유연성과 재구성 가능성을 시각적으로 보여줍니다.&lt;/p&gt;
&lt;p data-end=&quot;312&quot; data-start=&quot;215&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qQ3OW/btsN03bbSBU/KdkMpuL0eIrjjJtJciqhXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qQ3OW/btsN03bbSBU/KdkMpuL0eIrjjJtJciqhXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qQ3OW/btsN03bbSBU/KdkMpuL0eIrjjJtJciqhXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqQ3OW%2FbtsN03bbSBU%2FKdkMpuL0eIrjjJtJciqhXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;853&quot; height=&quot;325&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 프레임 동기화 신호(FS) 길이가 최대 256비트까지이다.&lt;/li&gt;
&lt;li&gt;그 중 활성화 구간은 최대 128비트까지다. FS의 폴링 엣지는 이 활성 구간 내에서 발생 할 수 있다. (폴링 엣지는 프레임 시작으로 인식된다.)&lt;/li&gt;
&lt;li&gt;오디오 프레임은 여러 개의 &lt;b&gt;슬롯(Slot)&lt;/b&gt; 으로 구성된다 (예: 채널 1, 채널 2 등)&lt;/li&gt;
&lt;li&gt;FS 신호는 &lt;b&gt;프레임의 경계&lt;/b&gt;를 알리는 역할을 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;517&quot; data-start=&quot;382&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AC&amp;rsquo;97 모드 또는 SPDIF 모드&lt;/b&gt;(SAI_xCR1 레지스터의 PRTCFG[1:0] 비트가 10 또는 01로 설정된 경우)에서는 &lt;b&gt;프레임 동기화 신호(FS)의 형상이 AC&amp;rsquo;97 프로토콜에 강제로 일치되도록 고정됩니다. &lt;/b&gt;따라서 이 경우에는 &lt;b&gt;SAI_xFRCR 레지스터 값은 무시&lt;/b&gt;됩니다. 또한, &lt;b&gt;각 오디오 블록은 독립적으로 동작하므로&lt;/b&gt;, &lt;b&gt;각 블록마다 별도의 설정이 필요&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;프레임 길이 (Frame Length)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;361&quot; data-start=&quot;318&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;361&quot; data-start=&quot;318&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;SAI에서 하나의 오디오 프레임은 최소 8비트로 구성되며, &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;프레임의 총 비트 수는 FRL[7:0] + 1로 계산됩니다. &lt;/span&gt;즉, FRL이 31이라면 한 프레임은 32비트로 구성됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background: #F9F7F6; border-left: 0.5em solid #688FF4; padding: 0.5em; font-weight: bold;&quot;&gt;Master Mode&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;681&quot; data-start=&quot;576&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;오디오 프레임의 길이는 SAI_xFRCR 레지스터의 FRL[7:0] 필드를 설정함으로써 최대 256비트 클럭 사이클까지 구성할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;681&quot; data-start=&quot;576&quot; data-ke-size=&quot;size16&quot;&gt;프레임의 길이가 해당 프레임에 선언된 슬롯(slot) 수보다 클 경우, 남는 비트는 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SAI_xCR2 레지스터의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;TRIS 비트 상태에 따라 두 가지 방식 중 하나로 처리됩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;681&quot; data-start=&quot;576&quot;&gt;0으로 채워서 전송 처리.&lt;/li&gt;
&lt;li data-end=&quot;681&quot; data-start=&quot;576&quot;&gt;SD 라인을 high-Z(하이 임피던스) 상태로 해제하여 처리.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;924&quot; data-start=&quot;891&quot; data-ke-size=&quot;size16&quot;&gt;수신 모드에서는, 이 남은 비트는 무시됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;588&quot; data-start=&quot;435&quot; data-ke-size=&quot;size16&quot;&gt;NODIV 비트가 0인 경우, 내부 &lt;b&gt;MCLK 분주기 활성화하는 모드&lt;/b&gt;로써, 오디오 프레임의 길이 (FRL + 1)은 &lt;b&gt;8에서 256 사이의 2의 거듭제곱 값&lt;/b&gt;이어야 합니다. 왜냐하면 내부 클럭 생성기가 &lt;b&gt;MCLK를 I2S/SCK로 정수 배수로 맞추기 위해 &lt;/b&gt;&lt;b&gt;정확히 나눌 수 있는 프레임 길이&lt;/b&gt;가 필요하기 때문입니다.&lt;/p&gt;
&lt;p data-end=&quot;664&quot; data-start=&quot;590&quot; data-ke-size=&quot;size16&quot;&gt;반대로 NODIV 비트가 1이면, (FRL + 1) &lt;b&gt;MCLK를 직접 입력으로 사용&lt;/b&gt;하거나 외부에서 주도하는 모드로써. 이 경우, 프레임 길이 (FRL + 1)은 8에서 256까지의 값으로 &lt;b&gt;자유롭게 구성이 가능합니다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background: #F9F7F6; border-left: 0.5em solid #688FF4; padding: 0.5em; font-weight: bold;&quot;&gt;Slave Mode&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;897&quot; data-start=&quot;649&quot; data-ke-size=&quot;size16&quot;&gt;오디오 프레임 길이는, 외부 마스터가 보내는 &lt;b&gt;오디오 프레임당 비트 클럭 주기의 수&lt;/b&gt;를 슬레이브에게 지정하는 데 사용됩니다. SAI 슬레이브 모드에서의 프레임 길이는 마스터가 보내는 오디오 프레임의 구조를 이해하는 기준이 되는데, 이 설정을 기반으로 슬레이브는 프레임 동기화 신호(FS)가 예상보다 빠르거나 늦게 도착했는지를 감지하고, 이러한 시점 오류는 에러로 처리됩니다.&lt;/p&gt;
&lt;p data-end=&quot;956&quot; data-start=&quot;899&quot; data-ke-size=&quot;size16&quot;&gt;다만 슬레이브는 클럭을 생성하지 않기 때문에, SAI_xFRCR 레지스터의 FRL[7:0] 설정에 &lt;b&gt;제한이 없습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;220&quot; data-end=&quot;248&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;프레임 동기화 극성(Frame synchronization polarity)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;489&quot; data-start=&quot;364&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;489&quot; data-start=&quot;364&quot; data-ke-size=&quot;size16&quot;&gt;SAI_xFRCR 레지스터의 &lt;b&gt;FSPOL 비트&lt;/b&gt;는 &lt;b&gt;프레임 시작을 알리는 FS 핀의 유효(active) 극성&lt;/b&gt;을 설정합니다. 프레임의 시작은 FS 신호의 Edge를 기준으로 감지됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background: #F9F7F6; border-left: 0.5em solid #688FF4; padding: 0.5em; font-weight: bold;&quot;&gt; &lt;span style=&quot;background-color: #f9f7f6; color: #333333; text-align: start;&quot;&gt;Slave&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; Mode&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1015&quot; data-start=&quot;937&quot; data-ke-size=&quot;size16&quot;&gt;슬레이브 모드에서 오디오 블록은 유효한 프레임 동기화 신호(FS)가 입력될 때까지 &lt;b&gt;데이터 송신 또는 수신을 대기&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-end=&quot;1053&quot; data-start=&quot;1017&quot; data-ke-size=&quot;size16&quot;&gt;프레임의 시작은 이 FS 신호에 &lt;b&gt;동기화되어 발생&lt;/b&gt;합니다. 단, 이 FS 신호가 &lt;b&gt;현재 진행 중인 통신 도중에 감지&lt;/b&gt;되면 &lt;b&gt;예상보다 빠른(anticipated) 프레임 시작&lt;/b&gt;으로 간주되어, &lt;b&gt;에러로 처리됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1053&quot; data-start=&quot;1017&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background: #F9F7F6; border-left: 0.5em solid #688FF4; padding: 0.5em; font-weight: bold;&quot;&gt; &lt;span style=&quot;background-color: #f9f7f6; color: #333333; text-align: start;&quot;&gt;Master&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; Mode&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1267&quot; data-start=&quot;1205&quot; data-ke-size=&quot;size16&quot;&gt;마스터 모드에서는 오디오 프레임이 끝날 때마다 프레임 동기화 신호(FS)가 &lt;b&gt;지속적으로 출력&lt;/b&gt;됩니다. 이 동작은 SAI_xCR1의 SAIEN 비트가 클리어될 때까지 계속됩니다. 이전 프레임이 끝났을 때 &lt;b&gt;FIFO에 전송할 데이터가 없다면&lt;/b&gt;, &lt;b&gt;언더런(underrun)&lt;/b&gt; 상태가 발생하지만, &lt;b&gt;오디오 통신 흐름은 중단되지 않습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;프레임 동기화 신호 활성 구간 길이 (Frame synchronization active level length)&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;719&quot; data-start=&quot;620&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프레임 동기화 신호(FS)의 &amp;lsquo;활성 구간(active level)&amp;rsquo; 길이를&lt;/b&gt; SAI_xFRCR 레지스터의 FSALL[6:0] 비트를 통해 설정할 수 있습니다. 이 길이는 &lt;b&gt;1비트부터 최대 128비트 클럭 사이클&lt;/b&gt;까지 지정할 수 있습니다. 참고로 활성 구간이란 FS 신호가 High(또는 Low)로 유지되는 시간으로써 이 시간 동안 해당 오디오 프레임이 유효하다는 뜻입니다.&lt;/p&gt;
&lt;p data-end=&quot;719&quot; data-start=&quot;620&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;727&quot; data-end=&quot;851&quot;&gt;
&lt;li data-start=&quot;727&quot; data-end=&quot;851&quot;&gt;예를 들어:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;740&quot; data-end=&quot;851&quot;&gt;
&lt;li data-end=&quot;848&quot; data-start=&quot;780&quot;&gt;&lt;b&gt;I2S&lt;/b&gt;, &lt;b&gt;LSB-정렬&lt;/b&gt;, &lt;b&gt;MSB-정렬&lt;/b&gt; 모드에서는 &lt;b&gt;프레임 길이의 절반&lt;/b&gt;으로 설정할 수 있고,&lt;/li&gt;
&lt;li data-end=&quot;903&quot; data-start=&quot;849&quot;&gt;&lt;b&gt;PCM/DSP&lt;/b&gt; 또는 &lt;b&gt;TDM 모드&lt;/b&gt;에서는 &lt;b&gt;1비트 폭으로 설정&lt;/b&gt;할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;220&quot; data-end=&quot;248&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;프레임 동기화 오프셋 (Frame synchronization offset)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;725&quot; data-start=&quot;608&quot; data-ke-size=&quot;size16&quot;&gt;애플리케이션에서 목표로 하는 오디오 프로토콜에 따라, FSOFF 비트를 통해 FS 신호가 오디오 프레임의 &lt;b&gt;첫 번째 비트&lt;/b&gt; 또는 &lt;b&gt;마지막 비트&lt;/b&gt;에 동기화되도록 설정할 수 있습니다. 이는 I2S나 MSB-Justified 같은 프로토콜의 요구사항에 따라 적절히 선택이 가능합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;851&quot; data-start=&quot;727&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;851&quot; data-start=&quot;727&quot;&gt;예를 들어:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;851&quot; data-start=&quot;740&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;786&quot; data-start=&quot;740&quot;&gt;&lt;b&gt;I2S 표준 프로토콜&lt;/b&gt;에서는 &lt;b&gt;마지막 비트&lt;/b&gt; 시점에 FS가 발생하고&lt;/li&gt;
&lt;li data-end=&quot;851&quot; data-start=&quot;789&quot;&gt;&lt;b&gt;MSB-정렬(MSB-Justified) 프로토콜&lt;/b&gt;에서는 &lt;b&gt;첫 번째 비트&lt;/b&gt; 시점에 FS가 발생합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-end=&quot;248&quot; data-start=&quot;220&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;border-bottom: 5px solid #f54f3d; padding: 0 0 0 0.2em; font-weight: bold;&quot;&gt;FS 신호 역할 (FS signal role)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;713&quot; data-start=&quot;586&quot; data-ke-size=&quot;size16&quot;&gt;FS(Frame Sync) 신호는 사용되는 오디오 프로토콜에 따라 &lt;b&gt;그 의미가 달라질 수 있습니다. &lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;713&quot; data-start=&quot;586&quot; data-ke-size=&quot;size16&quot;&gt;SAI_xFRCR 레지스터의 &lt;b&gt;FSDEF 비트&lt;/b&gt;를 통해 FS 신호의 역할을 다음 중 하나로 설정할 수 있습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;944&quot; data-start=&quot;715&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;808&quot; data-start=&quot;715&quot;&gt;FSDEF = 0:&lt;br /&gt;&lt;b&gt;프레임 시작을 알리는 신호&lt;/b&gt;로 동작합니다.&lt;br /&gt;&amp;rarr; 대표적인 예: &lt;b&gt;PCM/DSP&lt;/b&gt;, &lt;b&gt;TDM&lt;/b&gt;, &lt;b&gt;AC&amp;rsquo;97&lt;/b&gt; 등&lt;/li&gt;
&lt;li data-end=&quot;944&quot; data-start=&quot;810&quot;&gt;FSDEF = 1:&lt;br /&gt;&lt;b&gt;프레임의 시작 신호&lt;/b&gt;이면서 동시에 &lt;b&gt;오디오 프레임 내에서 좌/우 채널 구분 정보&lt;/b&gt;를 함께 포함합니다.&lt;br /&gt;&amp;rarr; 대표적인 예: &lt;b&gt;I2S&lt;/b&gt;, &lt;b&gt;MSB/LSB 우선 &lt;/b&gt;프로토콜&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;981&quot; data-start=&quot;870&quot; data-ke-size=&quot;size16&quot;&gt;FS 신호가 &lt;b&gt;프레임의 시작 신호이자 채널 방향(Left/Right) 식별&lt;/b&gt; 신호로 사용되는 경우, &lt;b&gt;선언된 슬롯 수&lt;/b&gt;는 &lt;b&gt;좌/우 채널 각각 절반씩 할당&lt;/b&gt;된 것으로 간주해야 합니다.&lt;/p&gt;
&lt;p data-end=&quot;1125&quot; data-start=&quot;983&quot; data-ke-size=&quot;size16&quot;&gt;만약, &lt;b&gt;한 채널에 해당하는 오디오 프레임 절반&lt;/b&gt;에서 &lt;b&gt;비트 클럭 수&lt;/b&gt;가 해당 채널에 할당된 슬롯 수보다 많고, TRIS = 0이면, 남은 비트 클럭 구간에서는 &lt;b&gt;0이 전송&lt;/b&gt;됩니다. (SAI_xCR2 레지스터 설정에 따름)&lt;/p&gt;
&lt;p data-end=&quot;1190&quot; data-start=&quot;1127&quot; data-ke-size=&quot;size16&quot;&gt;반대로 TRIS = 1인 경우에는, &lt;b&gt;SD 라인이 high-Z(하이 임피던스) 상태로 해제&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1257&quot; data-start=&quot;1192&quot; data-ke-size=&quot;size16&quot;&gt;수신 모드에서는, 채널 방향(Left &amp;harr; Right)이 전환되기 전까지 &lt;b&gt;남은 비트 클럭 구간은 무시&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;717&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AsnIX/btsN1n1fz3l/5JDXVd9kKuibOvErgkAOIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AsnIX/btsN1n1fz3l/5JDXVd9kKuibOvErgkAOIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AsnIX/btsN1n1fz3l/5JDXVd9kKuibOvErgkAOIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAsnIX%2FbtsN1n1fz3l%2F5JDXVd9kKuibOvErgkAOIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;949&quot; height=&quot;717&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;717&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1021&quot; data-start=&quot;817&quot; data-ke-size=&quot;size16&quot;&gt;만약, SAI_xFRCR의 &lt;b&gt;FSDEF 비트가 클리어된 상태&lt;/b&gt; (즉, FS 신호가 &lt;b&gt;단순한 프레임 시작 신호&lt;/b&gt;로 사용됨)이고, SAI_xSLOTR의 NBSLOT[3:0] (슬롯 개수) &amp;times; SLOTSZ[1:0] (슬롯당 비트 수)가 SAI_xFRCR의 프레임 길이 (FRL[7:0])보다 &lt;b&gt;작은 경우&lt;/b&gt;, 다음과 같은 동작이 발생합니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1220&quot; data-start=&quot;1023&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1107&quot; data-start=&quot;1023&quot;&gt;SAI_xCR2의 &lt;b&gt;TRIS = 0&lt;/b&gt;이면, &lt;b&gt;마지막 슬롯 이후의 남은 비트 클럭 구간은 0으로 채워져 전송&lt;/b&gt;됩니다 (송신기 기준)&lt;/li&gt;
&lt;li data-end=&quot;1171&quot; data-start=&quot;1109&quot;&gt;TRIS = 1이면, 남은 구간 동안 &lt;b&gt;SD 라인은 하이 임피던스(high-Z)로 해제&lt;/b&gt;됩니다, &lt;b&gt;수신기에서는&lt;/b&gt;, 이 &lt;b&gt;남은 비트 구간은 무시(discard)&lt;/b&gt; 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFMhbw/btsN03CgJDA/zPVMQETmbMkc4MwmpNTQrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFMhbw/btsN03CgJDA/zPVMQETmbMkc4MwmpNTQrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFMhbw/btsN03CgJDA/zPVMQETmbMkc4MwmpNTQrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFMhbw%2FbtsN03CgJDA%2FzPVMQETmbMkc4MwmpNTQrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;843&quot; height=&quot;400&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;672&quot; data-start=&quot;545&quot; data-ke-size=&quot;size16&quot;&gt;SAI를 SPDIF 출력 모드로 사용할 경우, 프레임 동기화 신호(FS)는 사용되지 않습니다.&lt;/p&gt;
&lt;p data-end=&quot;672&quot; data-start=&quot;545&quot; data-ke-size=&quot;size16&quot;&gt;이때 FS 핀은 해제되어 다른 용도로 자유롭게 활용할 수 있으며, SPDIF 데이터는 SD 라인을 통해 연속적으로 전송됩니다.&lt;/p&gt;
&lt;h3 style=&quot;border-bottom: 2px solid #ef6c57; text-align: left; color: #ef6c57; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #fff; position: relative; padding: 10px 15px 10px 0px; bottom: -19px;&quot;&gt;오디오 데이터 크기(Audio data size)&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SAI 오디오 전송에서는 &lt;b&gt;데이터 크기와 비트 전송 순서&lt;/b&gt;를 유연하게 설정할 수 있습니다.&lt;br /&gt;예를 들어, 오디오 샘플 해상도에 따라 SAI_xCR1 레지스터의 DS[2:0] 비트를 설정하면 오디오 프레임의 데이터 크기를 지정 할 수 있고,전송 순서 또한 LSBFIRST 비트를 통해 MSB 또는 LSB부터 전송되도록 조절할 수 있습니다.&lt;br /&gt;이러한 설정은 외부 DAC, ADC, 또는 DSP와의 호환성과 직접적으로 연결되며, 통신 안정성과 데이터 정합성을 확보하는 데 핵심적인 요소입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #ef6c57; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;[다음 회차]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1747546879516&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STM32F7] SAI(Serial audio interface) 학습하기 (4)&quot; data-og-description=&quot;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataShee&quot; data-og-host=&quot;starlighton.com&quot; data-og-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4&quot; data-og-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCxEQ7/hyYVgvODwx/nCpJGfntLTLBYbDRMoFCOk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cZVEkd/hyYTnh5uvJ/GvbEuMmt1ajd14geb3u5Rk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/vMzDc/hyYThPJaF8/ycabMVbCxkt7xywJrSsD80/img.png?width=847&amp;amp;height=451&amp;amp;face=0_0_847_451&quot;&gt;&lt;a href=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://starlighton.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCxEQ7/hyYVgvODwx/nCpJGfntLTLBYbDRMoFCOk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cZVEkd/hyYTnh5uvJ/GvbEuMmt1ajd14geb3u5Rk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/vMzDc/hyYThPJaF8/ycabMVbCxkt7xywJrSsD80/img.png?width=847&amp;amp;height=451&amp;amp;face=0_0_847_451');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STM32F7] SAI(Serial audio interface) 학습하기 (4)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (3)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (2)[이전 회차] [STM32F7] SAI(Serial audio interface) 학습하기 (1)들어가기 앞서 이것은 STM32F7 DataShee&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;starlighton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Embedded/ST Series</category>
      <author>별빛의온기</author>
      <guid isPermaLink="true">https://karniff.tistory.com/358</guid>
      <comments>https://karniff.tistory.com/entry/STM32F7-SAISerial-audio-interface-%ED%95%99%EC%8A%B5%ED%95%98%EA%B8%B0-3#entry358comment</comments>
      <pubDate>Sun, 18 May 2025 13:41:58 +0900</pubDate>
    </item>
  </channel>
</rss>