2417270_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2417270_ja-JP

2417270_ja-JP

SC16IS740:Auto-RTSの設定について助けが必要です

SC16IS740_750_760

現在、SPIを使ったこのSC16IS740をサポートするMicroPythonライブラリを書いています。
私はブレークアウトボードを使って、MAX3237に接続されたSC16IS740のテストを行っています。
すべての基本機能(RX & TX FiFoを含む)は正常に動作し、物理的なTX->RXループバック(および私のオシロスコープ)でテスト済みです。

今、Auto-RTS機能をテスト・実装したいと思っています。
確認するために、ch1をRXに、ch2をRTSに接続してオシロスコープを設置しました。
RXバッファをフラッディングして、RTS信号がスコープでHighに切り替わると思っていますが、実際には起こりません。

以下に、halt_trigger と resume_trigger の値 (文字単位) を含む MicroPython コードを示します。コードは主に特定のチャネル(「ch」パラメータ)に対してレジスタの読み書きを行います。
データシートに何か見落としがあるのですが、それが何なのか分かりません。

注記:最後の命令は、オシロスコープでの手動アクティベーションを確認するために、RTSをハイレベルに強制します。その後、その数値が低くなり、オートRTSで一度も起動されません......確かに、RXのFIFOは満タンになります。

	def enable_rts( self, halt_trigger, resume_trigger ):
		assert 4<=halt_trigger<=60, "RTS trigger must be within 4-60 range"
		assert 4<=resume_trigger<=60, "RTS trigger must be within 4-60 range"
		assert (halt_trigger%4) + (resume_trigger%4) == 0, "Trigger level are step by 4!"
		assert halt_trigger > resume_trigger, "halt_trigger must be greater than resume_trigger!"

		_halt = halt_trigger//4
		_resume = resume_trigger//4

		# Set LCR=0xBF to access EFR register
		_old_lcr = self.owner.bus_wrapper.read_reg( REG_LCR, ch=self.ch ) # store transmission config (eg: 8n1)
		self.owner.bus_wrapper.write_reg( REG_LCR, 0xBF, ch=self.ch )

		# activate enhanced feature
		_efr = self.owner.bus_wrapper.read_reg(REG_EFR, ch=self.ch)
		_efr = _efr | 0b00010000
		self.owner.bus_wrapper.write_reg(REG_EFR, _efr, ch=self.ch)
		print( "EFR:" , bin(self.owner.bus_wrapper.read_reg(REG_EFR, ch=self.ch)) , 'Enhanced function activation')

		# Close access to EFR & restore transmission config (eg:8n1)
		self.owner.bus_wrapper.write_reg( REG_LCR, _old_lcr, ch=self.ch )


		# Enable TCR & TLR register access
		_mcr = self.owner.bus_wrapper.read_reg(REG_MCR, ch=self.ch)
		_mcr = _mcr | 0b00000100
		self.owner.bus_wrapper.write_reg(REG_MCR, _mcr, ch=self.ch)
		print( "MCR:" , bin(self.owner.bus_wrapper.read_reg(REG_MCR, ch=self.ch)), 'Enable TCR & TLR register')

		# Set TCR trigger values
		_tcr = self.owner.bus_wrapper.read_reg(REG_TCR, ch=self.ch)
		_tcr = _tcr | (_resume<<4)
		_tcr = _tcr | _halt
		self.owner.bus_wrapper.write_reg(REG_TCR, _tcr, ch=self.ch)
		print( "TCR:", bin(self.owner.bus_wrapper.read_reg(REG_TCR, ch=self.ch)), "Transmission Control register (resume & halt levels)")

		# TLR must be cleared (to use TCR)
		self.owner.bus_wrapper.write_reg(REG_TLR, 0x00, ch=self.ch)
		print( "TLR:", bin(self.owner.bus_wrapper.read_reg(REG_TLR, ch=self.ch)), "Disable TLR values (so use TCR)")

		# Disable TCR & TLR register access
		_mcr = self.owner.bus_wrapper.read_reg(REG_MCR, ch=self.ch)
		_mcr = _mcr & 0b11111011
		self.owner.bus_wrapper.write_reg(REG_MCR, _mcr, ch=self.ch)
		print( "MCR:" , bin(self.owner.bus_wrapper.read_reg(REG_MCR, ch=self.ch)), 'Disable TCR & TLR register')


		self.owner.bus_wrapper.write_reg( REG_LCR, 0xBF, ch=self.ch )

		# Enable auto RTS flow control
		_efr = _efr | 0b01000000
		self.owner.bus_wrapper.write_reg(REG_EFR, _efr, ch=self.ch)
		print( "EFR:" , bin(self.owner.bus_wrapper.read_reg(REG_EFR, ch=self.ch)) , 'Enable auto RTS')

		# Close access to EFR & restore transmission config (eg:8n1)
		self.owner.bus_wrapper.write_reg( REG_LCR, _old_lcr, ch=self.ch )

		# Initial State of RTS bit in Modem (MCR)
		_mcr = self.owner.bus_wrapper.read_reg( REG_MCR, ch=self.ch )
		_mcr = _mcr | 0x02 
		self.owner.bus_wrapper.write_reg( REG_MCR, _mcr, ch=self.ch )


ご意見やご提案を心よりお待ちしております。
乾杯、
ドミニク

Re: SC16IS740 : Need help to configure Auto-RTS

こんにちは、

データシートに基づき、以下の点を確認することをお勧めします。

EFCR[4] = 0 であることを必ず確認してください。EFCR[4] は Auto RS-485 RTS コントロールを有効にします。このビットが設定されると、**トランスミッタ**はRTSピンの制御を行い、この機能は手動RTS制御およびハードウェアフロー制御回路の両方よりも優先されます。したがって、Auto-RTSハードウェアフロー制御を使用する場合はEFCR[4]をクリアする必要があります。

TLRはAuto-RTSの停止/再開閾値を定義していません。Auto-RTSでは、**レシーバ**のFIFOトリガーレベルはTCRから、またはTCRビットがクリアされている場合はFCRから取られます。TLRは、割り込み生成に関連する、プログラム可能な送信および受信FIFOトリガーレベルに使用されます。したがって、オートRTS動作にTLRのクリアリングは必須ではありません。

Re: SC16IS740 : Need help to configure Auto-RTS

こんにちは、 @ErikaC さん。

ご連絡ありがとうございます。
EFCR[4]を確認したところ、すべてが予想通りに進んでいることがわかりました。
ともあれ、EFCR[4]ありがとうございます。FUTURE的に役立つでしょう。

enable_rts.jpg

質問:何が変わったのですか?
応答:完全な電源サイクル。
推測:テストと試行錯誤が多すぎたために、SC16IS7xxxの設定が壊れてしまった可能性が高い。

ご協力いただきありがとうございます。
ドミニク

タグ(1)
評価なし
バージョン履歴
最終更新日:
昨日
更新者: